BUG #2542: ALTER USER foo SET bar = func(baz) errors out

Started by David Fetterover 19 years ago3 messagesbugs
Jump to latest
#1David Fetter
david@fetter.org

The following bug has been logged online:

Bug reference: 2542
Logged by: David Fetter
Email address: david@fetter.org
PostgreSQL version: All
Operating system: All
Description: ALTER USER foo SET bar = func(baz) errors out
Details:

foo=> ALTER USER foo SET search_path = current_setting('search_path');
ERROR: syntax error at or near "(" at character 52
LINE 1: ...LTER USER foo SET search_path = current_setting('search_p...

is there some way to let the right hand side of SET be the (TEXT) output of
a function?

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: David Fetter (#1)
Re: BUG #2542: ALTER USER foo SET bar = func(baz) errors out

"David Fetter" <david@fetter.org> writes:

is there some way to let the right hand side of SET be the (TEXT) output of
a function?

No. SET is a utility command and utility commands generally don't do
expression evaluation. (There are some specific reasons why not for
SET, but I won't get into that here.)

However, you can get the desired effect in various other ways; see the
set_config() function, or try updating the pg_settings view ...

regards, tom lane

#3David Fetter
david@fetter.org
In reply to: Tom Lane (#2)
Re: BUG #2542: ALTER USER foo SET bar = func(baz) errors out

On Thu, Jul 20, 2006 at 10:46:27PM -0400, Tom Lane wrote:

"David Fetter" <david@fetter.org> writes:

is there some way to let the right hand side of SET be the (TEXT)
output of a function?

No. SET is a utility command and utility commands generally don't
do expression evaluation. (There are some specific reasons why not
for SET, but I won't get into that here.)

However, you can get the desired effect in various other ways; see
the set_config() function, or try updating the pg_settings view ...

foo=> UPDATE pg_catalog.pg_settings SET setting = 'bar,' || setting
WHERE "name"='search_path';
-[ RECORD 1 ]----------------
set_config | bar,$user,public

That's a neat trick :)

However:

psql foo foo
foo=> SHOW search_path ;
search_path
--------------
$user,public
(1 row)

How do I make it permanent?

Cheers,
D
--
David Fetter <david@fetter.org> http://fetter.org/
phone: +1 415 235 3778 AIM: dfetter666
Skype: davidfetter

Remember to vote!