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