BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCH DICTIONARY
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
=?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
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