【问题标题】:Posgresql create table use information_schemaPostgresql 使用 information_schema 创建表
【发布时间】:2018-06-06 16:55:05
【问题描述】:

我正面临这个问题,我创建了一个具有多个公共架构以外的数据库。当我使用 postgres 用户角色连接时(使用 pgAdmin,如果我执行 create table 语句,则不会创建表,但是如果我浏览 information_schema.tables 该表被列为 table_schema=information_schema,即使在创建语句中我用公共模式。之后,如果我创建另一个表引用第一个表或只是从该表中选择,postgres 抱怨关系不存在。然后我必须删除表以继续。 如果我与另一个设置了超级用户属性的用户角色连接,则该表是在公共模式中创建的。 是否有任何我必须设置的数据库属性或我必须做的其他事情来避免上述问题?

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    请尝试使用提及架构名称的表创建表,例如 (create table schemaname.tablename(...)) 可能会解决您的问题。

    【讨论】:

    • 在我的问题中我说; “即使在创建语句中我使用公共模式限定表”,我的意思是“创建表 public.tablename ....”
    【解决方案2】:

    可能是你打字

    set search_path = information_schema;
    

    在 information_schema 中进行一些查询。但是当您创建表时,它是在 information_schema 中创建的。这是因为set search_path 中的第一个模式名称是创建对象的默认名称。

    【讨论】:

    • 不,当然。它仅发生在某些用户(包括 postgres)中,对于其他用户,我可以查询 information_schema 并成功在公共模式中创建表。我没有发现任何按用户角色设置 serch_path 的偏好。
    猜你喜欢
    • 2017-09-05
    • 2011-01-17
    • 2013-09-02
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2019-11-15
    • 2014-01-04
    • 2022-01-09
    相关资源
    最近更新 更多