Help with search_path setting - can't create objects

From: Eric Raskin <eraskin(at)paslists(dot)com>
To: pgsql-novice(at)postgresql(dot)org
Subject: Help with search_path setting - can't create objects
Date: 2015-08-18 15:05:49
Message-ID: 55D349CD.5020308@paslists.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

Hello:

Brand new postgresql user. Long time Oracle user. Looking to
migrate... ;-)

I have created a user (sbowner) and a database (pas) owned by that
user. I have created a schema sbowner with the same name as the user.
I have created it with:

create schema authorization sbowner;

When I connect as the user, my search_path looks like this:

$ psql -U sbowner -d pas -h postgres
Password for user sbowner:
psql (9.4.4)
Type "help" for help.

pas=> show search_path;
search_path
-------------------
"sbowner, public"
(1 row)

pas=> \dn
List of schemas
Name | Owner
--------------+----------
dbms_alert | postgres
dbms_assert | postgres
dbms_output | postgres
dbms_pipe | postgres
dbms_random | postgres
dbms_utility | postgres
oracle | postgres
plunit | postgres
plvchr | postgres
plvdate | postgres
plvlex | postgres
plvstr | postgres
plvsubst | postgres
public | postgres
sbowner | sbowner
utl_file | postgres
(16 rows)

pas=> create table test(a1 char);
ERROR: no schema has been selected to create in

So, it says the schema does not exist or it doesn't know where to create
the table. It clearly does exist, according to the \dn listing, so the
search_path must be wrong somehow.

When I do this, it works:

pas=> set search_path to sbowner, public;
SET
pas=> show search_path;
search_path
-----------------
sbowner, public
(1 row)

pas=> create table test (a1 char);
CREATE TABLE
pas=> \dt
List of relations
Schema | Name | Type | Owner
---------+------+-------+---------
sbowner | test | table | sbowner
(1 row)

So, the difference I see is that the default search_path when I start
the database has quotes around it, and when I reset it the quotes are
gone.

Note: I have tried:

pas=# alter database pas set search_path = "$user", public;

That did not help. My postgresql.conf has:

#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

# - Statement Behavior -

#search_path = '"$user",public' # schema names
#default_tablespace = '' # a tablespace name, '' uses the default
#temp_tablespaces = '' # a list of tablespace names, '' uses
# only default tablespace

As you can see, the default setting is in use (the line is commented
out). I see that the default setting has quotes around it. I tried
setting it like this:

search_path = "$user",public # schema names

When I did that, postgresql wouldn't start. Clearly it was a syntax
error of some kind.

Why is this happening? How do I fix the system search_path so that it
just "works"?

Thanks in advance...

Eric Raskin
eraskin at paslists dot com

--
-----------------------------------------------------------------------------------------------------------------------------------------------
Eric H. Raskin 914-765-0500 x120
Professional Advertising Systems Inc. 914-765-0503 fax
200 Business Park Dr Suite 304 eraskin(at)paslists(dot)com
Armonk, NY 10504 http://www.paslists.com

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message Eric Raskin 2015-08-18 15:09:19 Problem with search_path and creating objects
Previous Message Jude DaShiell 2015-08-18 14:57:32 missing records check