BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCH DICTIONARY

Started by PG Bug reporting formalmost 8 years ago3 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 15181
Logged by: Adam Bartoszewicz
Email address: adam.bartoszewicz@gmail.com
PostgreSQL version: 9.3.22
Operating system: CentOS 6
Description:

Helo,
I use PostgreSQL v 9.3.22 (enterprisedb.com installer), CentOS 6
I created custom text search dictionary following instructions found in
https://github.com/nediam/tsearch-polish/blob/wiki/PolskiSlownikTsearchPostgreSQL.md.
It is in Polish but has two simple steps:
1. Unpack
http://tsearch-polish.googlecode.com/files/tsearch_data_polish_20120730.zip
and copy to share/tsearch_data/ folder
2. Run commands
CREATE TEXT SEARCH CONFIGURATION public.polish ( COPY = pg_catalog.english
);
CREATE TEXT SEARCH DICTIONARY polish_ispell (
TEMPLATE = ispell,
DictFile = polish, -- tsearch_data/polish.dict
AffFile = polish, -- tsearch_data/polish.affix
StopWords = polish -- tsearch_data/polish.stop
);
CREATE TEXT SEARCH DICTIONARY polish_synonym (
TEMPLATE = synonym,
SYNONYMS = polish -- tsearch_data/polish.syn
);
CREATE TEXT SEARCH DICTIONARY polish_thesaurus (
TEMPLATE = thesaurus,
DictFile = polish, -- tsearch_data/polish.ths
Dictionary = polish_ispell
);
ALTER TEXT SEARCH CONFIGURATION polish
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword,
hword_part
WITH polish_thesaurus, polish_synonym, polish_ispell, simple;

The bug ocurs when I try to dump and reload database structure.
pg_dump creates command with missing schema:
CREATE TEXT SEARCH DICTIONARY public.polish_thesaurus (
TEMPLATE = pg_catalog.thesaurus,
dictfile = 'polish', dictionary = 'polish_ispell' );

dictionary = 'polish_ispell'
instead of
dictionary = 'public.polish_ispell'

psql -f pg_dump_file raises error:
ERROR: text search dictionary "polish_ispell" does not exist

There is of course simple workaround: manually correct file created by
pg_dump.

Adam

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCH DICTIONARY

=?utf-8?q?PG_Bug_reporting_form?= <noreply@postgresql.org> writes:

CREATE TEXT SEARCH DICTIONARY polish_thesaurus (
TEMPLATE = thesaurus,
DictFile = polish, -- tsearch_data/polish.ths
Dictionary = polish_ispell
);

The bug ocurs when I try to dump and reload database structure.
pg_dump creates command with missing schema:
CREATE TEXT SEARCH DICTIONARY public.polish_thesaurus (
TEMPLATE = pg_catalog.thesaurus,
dictfile = 'polish', dictionary = 'polish_ispell' );

Hm. There is not a lot that pg_dump can do about that: it's really
a design shortcoming in the thesaurus template, namely that the
sub-dictionary is referenced by a string rather than by OID. You could
break it equally well with "ALTER TEXT SEARCH DICTIONARY polish_ispell
RENAME ...", or for that matter by trying to use polish_thesaurus in any
context where you didn't have the public schema in your search path.

I'd recommend explicitly specifying "Dictionary = public.polish_ispell"
when you create the thesaurus dictionary.

I suppose we should adjust the docs to point out this hazard, as well.

regards, tom lane

#3Adam Bartoszewicz
adam.bartoszewicz@gmail.com
In reply to: Tom Lane (#2)
Re: BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCH DICTIONARY

You are right. "Dictionary = public.polish_ispell" resolves the problem.
Thank you.
Adam Bartoszewicz

W dniu 2018-04-30 o 17:30, Tom Lane pisze:

Show quoted text

=?utf-8?q?PG_Bug_reporting_form?= <noreply@postgresql.org> writes:

CREATE TEXT SEARCH DICTIONARY polish_thesaurus (
TEMPLATE = thesaurus,
DictFile = polish, -- tsearch_data/polish.ths
Dictionary = polish_ispell
);
The bug ocurs when I try to dump and reload database structure.
pg_dump creates command with missing schema:
CREATE TEXT SEARCH DICTIONARY public.polish_thesaurus (
TEMPLATE = pg_catalog.thesaurus,
dictfile = 'polish', dictionary = 'polish_ispell' );

Hm. There is not a lot that pg_dump can do about that: it's really
a design shortcoming in the thesaurus template, namely that the
sub-dictionary is referenced by a string rather than by OID. You could
break it equally well with "ALTER TEXT SEARCH DICTIONARY polish_ispell
RENAME ...", or for that matter by trying to use polish_thesaurus in any
context where you didn't have the public schema in your search path.

I'd recommend explicitly specifying "Dictionary = public.polish_ispell"
when you create the thesaurus dictionary.

I suppose we should adjust the docs to point out this hazard, as well.

regards, tom lane