Обсуждение: Quoting $user as Parameter to SET
The default search_path is $user, public.
Say I wanted to reverse this in a database called d:
First of all:
d=> show search_path;
search_path
--------------
$user,public
(1 row)
Then:
d=> alter database d set search_path to public, '$user';
Then, in a new session:
d=> show search_path;
search_path
-----------------
public, "$user"
(1 row)
This is an important distinction because testing reveals that the quoted $user after the reversal is no longer actually a dynamic variable that results in a search_path that resolves to the current user.
I'm having trouble locating an example of how to include a variable in the parameter list to SET.
--
Thomas F. O'Connell
Co-Founder, Information Architect
Sitening, LLC
Strategic Open Source: Open Your i™
110 30th Avenue North, Suite 6
Nashville, TN 37203-6320
615-260-0005
"Thomas F. O'Connell" <tfo@sitening.com> writes:
> This is an important distinction because testing reveals that the
> quoted $user after the reversal is no longer actually a dynamic
> variable that results in a search_path that resolves to the current
> user.
Really? It works fine for me:
regression=# create schema postgres;
CREATE SCHEMA
regression=# show search_path;
search_path
--------------
$user,public
(1 row)
regression=# select current_schemas(true);
current_schemas
------------------------------
{pg_catalog,postgres,public}
(1 row)
regression=# alter database regression set search_path = public, '$user';
ALTER DATABASE
regression=# \c -
You are now connected to database "regression".
regression=# show search_path;
search_path
-----------------
public, "$user"
(1 row)
regression=# select current_schemas(true);
current_schemas
------------------------------
{pg_catalog,public,postgres}
(1 row)
regression=#
regards, tom lane
Uh... Just kidding, I guess. Wish I had a screen capture of what I had done before because I swear I was unable to create a table in the user namespace after having created it. But now that I look more closely (including when running current_schemas(true)), everything looks fine. Sorry for the noise... -- Thomas F. O'Connell Co-Founder, Information Architect Sitening, LLC Strategic Open Source: Open Your i™ http://www.sitening.com/ 110 30th Avenue North, Suite 6 Nashville, TN 37203-6320 615-260-0005 On Jul 11, 2005, at 6:04 PM, Tom Lane wrote: > "Thomas F. O'Connell" <tfo@sitening.com> writes: > >> This is an important distinction because testing reveals that the >> quoted $user after the reversal is no longer actually a dynamic >> variable that results in a search_path that resolves to the current >> user. >> > > Really? It works fine for me: > > regression=# create schema postgres; > CREATE SCHEMA > regression=# show search_path; > search_path > -------------- > $user,public > (1 row) > > regression=# select current_schemas(true); > current_schemas > ------------------------------ > {pg_catalog,postgres,public} > (1 row) > > regression=# alter database regression set search_path = public, > '$user'; > ALTER DATABASE > regression=# \c - > You are now connected to database "regression". > regression=# show search_path; > search_path > ----------------- > public, "$user" > (1 row) > > regression=# select current_schemas(true); > current_schemas > ------------------------------ > {pg_catalog,public,postgres} > (1 row) > > regression=# > > regards, tom lane >