Sql postgres:创建表时架构不存在

Sql postgres:创建表时架构不存在,sql,postgresql,schema,Sql,Postgresql,Schema,您能告诉我为什么尝试创建这样的表: CREATE TABLE IF NOT EXISTS doc.bgp_communities ( i SERIAL PRIMARY KEY, comm_name TEXT NOT NULL, comm_value TEXT NOT NULL, label TEXT NOT NULL, used_as TEXT NOT NULL, mod

您能告诉我为什么尝试创建这样的表:

CREATE TABLE IF NOT EXISTS  doc.bgp_communities (

    i             SERIAL PRIMARY KEY,
    comm_name     TEXT NOT NULL,
    comm_value    TEXT NOT NULL,
    label         TEXT NOT NULL,
    used_as       TEXT NOT NULL,
        modified_on   TIMESTAMPZ DEFAULT NOW(),

    UNIQUE        ( comm_value ),
    CHECK         ( (comm_value SIMILAR TO '%:%') OR (comm_value SIMILAR TO '%:%:%') ),
    CHECK         ( used_as IN ('bgp-customer','destination','dtv-peer','free-peer','generic','infrastructure','origin','private-peer','public-peer','traffic-eng','voip-peer') )

) ;
在此之前,我创建了以下模式:

ip_spotlight-# CREATE SCHEMA doc
ip_spotlight-# CREATE SCHEMA net
ip_spotlight-# ALTER DATABASE ip_spotlight SET search_path TO doc,net
我收到以下错误消息:

ERROR:  schema "doc" does not exist
你能告诉我我做错了什么吗

PS:我的用户“应用程序”的配置如下:

app          | Superuser, No inheritance, Create role, Create DB, Replication | {}
编辑

app@[local]:5432 ip_spotlight# CREATE SCHEMA doc ;
CREATE SCHEMA
Time: 1.492 ms
app@[local]:5432* ip_spotlight# CREATE SCHEMA net ;
CREATE SCHEMA
Time: 0.641 ms
app@[local]:5432* ip_spotlight# ALTER DATABASE ip_spotlight SET search_path TO doc,net ;
ALTER DATABASE
Time: 1.036 ms

# CREATE TABLE IF NOT EXISTS  doc.bgp_communities (
ip_spotlight(# i             SERIAL PRIMARY KEY,
ip_spotlight(# comm_name     TEXT NOT NULL,
ip_spotlight(# comm_value    TEXT NOT NULL,
ip_spotlight(# label         TEXT NOT NULL,
ip_spotlight(# used_as       TEXT NOT NULL,
ip_spotlight(# modified_on   TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
ip_spotlight(# UNIQUE        ( comm_value ),
ip_spotlight(# CHECK         ( (comm_value SIMILAR TO '%:%') OR (comm_value SIMILAR TO '%:%:%') ),
ip_spotlight(# CHECK         ( used_as IN ('bgp-customer','destination','dtv-peer','free-peer','generic','infrastructure','origin','private-peer','public-peer','traffic-eng','voip-peer') )
ip_spotlight(# ) ;
ERROR:  schema "doc" does not exist
Time: 0.686 ms
app@[local]:5432! ip_spotlight# \dn
ERROR:  current transaction is aborted, commands ignored until end of transaction block
app@[local]:5432! ip_spotlight# 

命令末尾缺少分号,因此可能没有创建任何架构:

ip_spotlight-# CREATE SCHEMA doc
ip_spotlight-# CREATE SCHEMA net
ip_spotlight-# ALTER DATABASE ip_spotlight SET search_path TO doc,net
我们应该看看:

t=# CREATE SCHEMA doc;
CREATE SCHEMA
t=# CREATE SCHEMA net;
CREATE SCHEMA
t=# ALTER DATABASE ip_spotlight SET search_path TO doc,net;
ALTER DATABASE

ip_spotlight-#创建架构文档ip_spotlight-#创建架构网络ip_spotlight-#更改数据库ip_spotlight设置搜索路径到doc,net
need';'在每个命令端,将成为
ip#u spotlight-#创建模式文档;ip_spotlight-#创建模式网络;ip_spotlight-#将数据库ip_spotlight设置搜索路径为doc,net无法使用超级用户重现错误。顺便说一句,改变数据库。。。设置不影响当前会话。您需要重新连接以获取它或执行
set紧接着
更改数据库。。。设置
是否在事务中运行
createschema
语句?如果是,那么您需要提交该事务,就像在PostgreSQL中一样,DDL语句(也)参与该事务。(您的语句之间的空格可能意味着您实际上正在运行两个独立的事务,是吗?)。感谢@VaoTsun的关注。这无疑是一个进步。但我还是犯了同样的错误。你能猜出什么地方出了问题吗?请参阅上面的“编辑”部分,我们必须以“postgres”用户的身份进行编辑:)