Re: Seems to be impossible to set a NULL search_path - Mailing list pgsql-general
From | Adrian Klaver |
---|---|
Subject | Re: Seems to be impossible to set a NULL search_path |
Date | |
Msg-id | 7bdd0ecd-0bf6-b5ac-534c-1f2f428c84b7@aklaver.com Whole thread Raw |
In response to | Re: Seems to be impossible to set a NULL search_path (Bryn Llewellyn <bryn@yugabyte.com>) |
Responses |
Re: Seems to be impossible to set a NULL search_path
|
List | pgsql-general |
On 7/5/22 20:55, Bryn Llewellyn wrote: > // >> /david.g.johnston@gmail.com <mailto:david.g.johnston@gmail.com> wrote: >> / >>> tgl@sss.pgh.pa.us <mailto:tgl@sss.pgh.pa.us> wrote: >>> >>> search_path's value is not a SQL name. It's a list of SQL >>> names wrapped in a string ... and the list can be empty. >> >> This doesn't seem to be correct - wrapping them in single quotes in >> the SET command ends up behaving as if you wrapped them in double >> quotes anywhere else (and wrapping them individually in double quotes >> here works just fine too). > > And then... > >> /adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com> wrote:/ >> >> Those are creating objects. Set search_path is setting a configuration >> value. Pretty sure it is: >> >> { TO | = } { value | 'value' | DEFAULT > > There's different use cases. For example: > > *set my_namspace.x = 'Dog house';* > *show my_namspace.x ; Not sure what your point is? > * > I can't reconcile what you three (Tom, David, and Adrian) have said. I'm > interested to hear how you interpret what I showed in this reply: > > https://www.postgresql.org/message-id/48E1391E-5A21-4736-B4B1-8B9468ECAFD4%40yugabyte.com > <https://www.postgresql.org/message-id/48E1391E-5A21-4736-B4B1-8B9468ECAFD4%40yugabyte.com> > > and in particular to this: > > *create schema "s1, s2"; > create table "s1, s2".t(k int); > insert into "s1, s2".t(k) values(42); > set search_path = "s1, s2";* > *show **search_path;** > select k from t;* > > OR (with single quotes in "set search_path": > > *create schema "s1, s2"; > create table "s1, s2".t(k int); > insert into "s1, s2".t(k) values(42); > set search_path = 's1, s2'; > **show **search_path;** > **select k from t; > * From here https://www.postgresql.org/docs/current/runtime-config-client.html: search_path (string) ... The value for search_path must be a comma-separated list of schema names ... By quoting the above in either single or double quotes you change what looks like a list pf schemas into a single schema: show search_path; search_path ------------- "s1, s2" If you want that to be a list of schemas then: set search_path = s1, s2; SET show search_path; search_path ------------- s1, s2 > I get a resounding 42 in both cases. Now try this: > > *set search_path = no_such_schema, "No Such Schema";* > *show **search_path;** Which is same as: set search_path = no_such_schema, 'No Such Schema'; show search_path; search_path ---------------------------------- no_such_schema, "No Such Schema" Since the list of names will end up being identifiers for schema any name with spaces needs to be quoted. Otherwise: set search_path = no_such_schema, No Such Schema; ERROR: syntax error at or near "Such" LINE 1: set search_path = no_such_schema, No Such Schema; > * > > All outcomes accord with the mental model that you tell me is wrong. > -- Adrian Klaver adrian.klaver@aklaver.com
pgsql-general by date: