Thread: Schemas to Search_path

Schemas to Search_path

From
"Subbiah, Stalin"
Date:

I was playing around with schemas today to understand how it would fit in our application design. I couldn't understand why I got to set search_path to schema name everytime I login to psql.

This is what I did.

-ceated a user "foo" with createdb privilege as psql -d template1
-created db "foodb" with encoding = unicode as psql -d template1 -U foo -- this makes foo as the owner of the db.
-create schema "foo_schema" with authorization to foo user as psql -d foodb -U foo
-dropped public schema as I don't want others or foo user to create objects in public schema. I did this via psql -d foodb -U postgres -- since postgres being the owner of public schema I had to login as superuser postgres.

Now comes the fun part

I logged into foodb as foo user and tried to create a table. Bang! ERROR:  no schema has been selected to create in. search_path had $user, public the default ones, shouldn't the table get created in user's authorized schema. Perhaps, I'm trying to compare with oracle users/schemas.

However, when set search path to foo_schema then table gets created fine. Also, whenever I login, how should make \dt to just show the objects under the user's authorized schema without setting search path everytime.

Thanks
Stalin

Re: Schemas to Search_path

From
Tom Lane
Date:
"Subbiah, Stalin" <SSubbiah@netopia.com> writes:
> I logged into foodb as foo user and tried to create a table. Bang!
> ERROR:  no schema has been selected to create in. search_path had $user,
> public the default ones, shouldn't the table get created in user's
> authorized schema.

Which one?

Now, if you make the schema name the same as the user name, it will do
what you want --- that's what the $user is for.  If you want some other
schema that happens to belong to that user to be the default, you have
to adjust the normal value of search_path.  (See ALTER USER SET if you'd
like that adjustment to be done for you automatically at each login.)

            regards, tom lane

Re: Schemas to Search_path

From
"Subbiah, Stalin"
Date:
I created schema name "foo_schema" different from user name "foo".
However, when I created the schema, I had specified authorization set to
foo user.

Does that mean, if the owner of the schema and schema name are
different, then only way, is to set through alter user set or search
path correct ?

Thanks Much!

-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Wednesday, March 09, 2005 4:57 PM
To: Subbiah, Stalin
Cc: pgsql-admin@postgresql.org
Subject: Re: [ADMIN] Schemas to Search_path

"Subbiah, Stalin" <SSubbiah@netopia.com> writes:
> I logged into foodb as foo user and tried to create a table. Bang!
> ERROR:  no schema has been selected to create in. search_path had
> $user, public the default ones, shouldn't the table get created in
> user's authorized schema.

Which one?

Now, if you make the schema name the same as the user name, it will do
what you want --- that's what the $user is for.  If you want some other
schema that happens to belong to that user to be the default, you have
to adjust the normal value of search_path.  (See ALTER USER SET if you'd
like that adjustment to be done for you automatically at each login.)

            regards, tom lane

Re: Schemas to Search_path

From
Edmund Bacon
Date:
SSubbiah@netopia.com ("Subbiah, Stalin") writes:

> I created schema name "foo_schema" different from user name "foo".
> However, when I created the schema, I had specified authorization set to
> foo user.
>
> Does that mean, if the owner of the schema and schema name are
> different, then only way, is to set through alter user set or search
> path correct ?
>
There is also ALTER DATABASE foo SET search_path TO schema [, schema]
...

> Thanks Much!

--
Remove -42 for email