Re: default_text_search_config and expression indexes - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: default_text_search_config and expression indexes
Date
Msg-id 200707280122.l6S1ML213868@momjian.us
Whole thread Raw
In response to Re: default_text_search_config and expression indexes  (Magnus Hagander <magnus@hagander.net>)
Responses Re: default_text_search_config and expression indexes  (Magnus Hagander <magnus@hagander.net>)
Re: default_text_search_config and expression indexes  (Oleg Bartunov <oleg@sai.msu.su>)
List pgsql-hackers
Magnus Hagander wrote:
> > However, the big problem is that the expressions used in expression
> > indexes should not change their output based on the value of a GUC
> > variable (because it would corrupt the index), but in the case above,
> > default_text_search_config controls what configuration is used, and
> > hence the output of to_tsvector is changed if default_text_search_config
> > changes.
> 
> It wuoldn't actually *corrupt* the index, right? You could end up with
> wrong results, which might be regarded as corruption in one way, but as
> long as you change the value back the index still works, no?

Right, it would _temporarily_ corrupt it.  ;-)

> > We have a few possible options:
> > 
> >     1) Document the problem and do nothing else.
> >     2) Make default_text_search_config a postgresql.conf-only
> >        setting, thereby making it impossible to change by non-super
> >        users, or make it a super-user-only setting.
> >     3) Remove default_text_search_config and require the
> >        configuration to be specified in each function call.
> > 
> > If we remove default_text_search_config, it would also make ::tsvector
> > casting useless as well.
> 
> I think 3 is a really bad solution.
> 
> 2 is a half-bad solution. Do we have a way to say that it can be set at
> database-level for example, but not at user session? Making it
> superuser-only to change it but not postgresql.conf-only could accomplish
> that, along with warnings in the docs for the super user about the effects
> on current indexes by changing it.

OK, here is what I am thinking.  If we make default_text_search_config
super-user-only, then the user can't do SET (using "zero_damaged_pages"
as a superuser-only example):
test=> set zero_damaged_pages = on;ERROR:  permission denied to set parameter "zero_damaged_pages"test=> alter user
guestset zero_damaged_pages = on;ERROR:  permission denied to set parameter "zero_damaged_pages"
 

but the super-user can set it in postgresql.conf, or:
test=# alter user guest set zero_damaged_pages = on;ALTER ROLE

or
test=# alter database vendor3 set zero_damaged_pages = on;ALTER ROLE

meaning while it will be super-user-only, the administrator can set the
default for specific databases and users.  Is that the best approach?

A user can still over-ride the default by specifying the configuration
in the function call.

--  Bruce Momjian  <bruce@momjian.us>          http://momjian.us EnterpriseDB
http://www.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Updated tsearch documentation
Next
From: algatt
Date:
Subject: New Index