Thread: BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCH DICTIONARY
BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCH DICTIONARY
From
PG Bug reporting form
Date:
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
Re: BUG #15181: pg_dump - missing schema in CREATE TEXT SEARCHDICTIONARY
From
Adam Bartoszewicz
Date:
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: > =?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