Обсуждение: can't create table on new db/schema/user
What I have: debian 10 postgresql 11.7-0+deb10u1 What I did: sudo -s mkdir /var/lib/postgresql/11/ts_chris chown postgres: /var/lib/postgresql/11/ts_chris chmod 700 /var/lib/postgresql/11/ts_chris su - postgres -c psql create user "chris" with login password '***' connection limit -1; create tablespace "ts_chris" owner chris location '/var/lib/postgresql/11/ts_chris'; alter tablespace ts_chris owner to chris; create database db_chris owner = automicuser template = template0 encoding = "UTF-8" tablespace = ts_chris lc_collate= "C" lc_ctype = "C" connection limit = -1 ; create schema s_chris authorization "chris"; alter role chris in database db_chris set search_path to s_chris; grant usage on schema s_chris to chris; grant create on schema s_chris to chris; What I tried: psql -h lxc05 db_chris chris db_chris=> create table t1 (i int); ERROR: no schema has been selected to create in LINE 1: create table t1 (i int); ^ Debugging attempts: postgres=# \dn+ List of schemas Name | Owner | Access privileges | Description ---------+-------------+----------------------------+------------------------ public | postgres | postgres=UC/postgres +| standard public schema | | =UC/postgres | s_chris | chris | chris=UC/chris | (3 rows) postgres=# \dg+ List of roles Role name | Attributes | Member of | Description -------------+------------------------------------------------------------+-----------+------------- chris | | {} | postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} | db_chris=> create table t1 (i int); ERROR: no schema has been selected to create in LINE 1: create table t1 (i int); ^ db_chris=> \dn+ List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | (1 row) db_chris=> \dg+ List of roles Role name | Attributes | Member of | Description -------------+------------------------------------------------------------+-----------+------------- chris | | {} | postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} | db_chris=> show search_path; search_path ------------- s_chris (1 row) So, what did I miss? Kind regards, Chris
On Fri, Aug 28, 2020 at 12:32:02PM +0200, psql-contact@citecs.de wrote: > postgres=# \dn+ > List of schemas > Name | Owner | Access privileges | Description > ---------+-------------+----------------------------+------------------------ > public | postgres | postgres=UC/postgres +| standard public schema > | | =UC/postgres | > s_chris | chris | chris=UC/chris | > (3 rows) > > postgres=# \dg+ > List of roles > Role name | Attributes | Member of | Description > -------------+------------------------------------------------------------+-----------+------------- > chris | | {} | > postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} | > > db_chris=> create table t1 (i int); > ERROR: no schema has been selected to create in > LINE 1: create table t1 (i int); > ^ > db_chris=> \dn+ > List of schemas > Name | Owner | Access privileges | Description > --------+----------+----------------------+------------------------ > public | postgres | postgres=UC/postgres+| standard public schema > | | =UC/postgres | > (1 row) > > db_chris=> \dg+ > List of roles > Role name | Attributes | Member of | Description > -------------+------------------------------------------------------------+-----------+------------- > chris | | {} | > postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} | > > db_chris=> show search_path; > search_path > ------------- > s_chris > (1 row) > So, what did I miss? Schema s_chris is in database "postgres", but you try to make the table in "db_chris". So you have to make the schema in db_chris database. Best regards, depesz
On Fri, Aug 28, 2020 at 12:56:12PM +0200, hubert depesz lubaczewski wrote: > Schema s_chris is in database "postgres", but you try to make the table > in "db_chris". > > So you have to make the schema in db_chris database. How would I do that? I ran create schema s_chris authorization "chris"; How do I specify the database? According to https://www.postgresql.org/docs/11/sql-createschema.html there seems to be no such parameter.
On Fri, Aug 28, 2020 at 01:28:35PM +0200, psql-contact@citecs.de wrote: > On Fri, Aug 28, 2020 at 12:56:12PM +0200, hubert depesz lubaczewski wrote: > > Schema s_chris is in database "postgres", but you try to make the table > > in "db_chris". > > > > So you have to make the schema in db_chris database. > > How would I do that? You have to actually _connnect_ to the database the schema is created for: \connect db_chris create schema s_chris authorization "chris"; \connect postgres Yeah, that's why it's called pgsql-novice@...
You must be connected to the database in psql first
\c db_chris
Then create schema ....
Le ven. 28 août 2020 à 13:28, <psql-contact@citecs.de> a écrit :
On Fri, Aug 28, 2020 at 12:56:12PM +0200, hubert depesz lubaczewski wrote:
> Schema s_chris is in database "postgres", but you try to make the table
> in "db_chris".
>
> So you have to make the schema in db_chris database.
How would I do that?
I ran
create schema s_chris authorization "chris";
How do I specify the database?
According to
https://www.postgresql.org/docs/11/sql-createschema.html
there seems to be no such parameter.
On Fri, Aug 28, 2020 at 01:47:56PM +0200, Didier Gasser-Morlay wrote: > You must be connected to the database in psql first > > \c db_chris > Then create schema .... Thanx :-)