【问题标题】:Postgresql role can't access its created schemaPostgresql 角色无法访问其创建的架构
【发布时间】:2012-12-03 22:20:37
【问题描述】:

重要信息

  • 我在 Windows 7 64 位上使用 Postgresql 9.2。它是使用Postgresql website提供的安装程序安装的
  • 我以 postgres 身份登录到 postgres 数据库
  • 我在 postgres 用户下创建 BryceTest Schema
  • 我将search_path 配置为显示"brycetest, public"

当由 pgAdmin-III 提供的查询生成器生成时,此 SQL 按预期工作

SELECT "DummyDataMasterTable"."Dummy_PK", 
       "DummyDataMasterTable"."DummyName"
FROM "BryceTest"."DummyDataMasterTable";

但这不是

SELECT DummyDataMasterTable.Dummy_PK, 
       DummyDataMasterTable.DummyName
FROM BryceTest.DummyDataMasterTable;
-------------------------------------------

ERROR:  relation "dummydatamastertable" does not exist
LINE 4:     FROM DummyDataMasterTable;
                 ^

********** Error **********

ERROR: relation "dummydatamastertable" does not exist
SQL state: 42P01
Character: 101

     FROM BryceTest.DummyDataMasterTable;

也没有

SELECT 
    Dummy_PK, 
    DummyName
FROM DummyDataMasterTable;

-------------------------------
ERROR:  relation "dummydatamastertable" does not exist
LINE 4:     FROM DummyDataMasterTable;                     ^

********** Error **********

ERROR: relation "dummydatamastertable" does not exist
SQL state: 42P01
Character: 59

我会认为通过配置我的架构 search_path 来查看我新创建的架构 FIRST,它不需要完全限定 schemaName.tableName

【问题讨论】:

    标签: database database-schema postgresql-9.2


    【解决方案1】:

    您使用双引号创建了表,因此它们现在区分大小写(按照 ANSI SQL 标准的要求)。

    "FooBar""Foobar" 名称不同,但FooBarfoobar 名称相同(因为它们没有被引用)。

    因为您这样做了,所以您必须总是引用表名和列名。

    以下方法有效,因为没有引用标识符:

    create table FooBar 
    (
      Some_COLUMN integer
    );
    
    select some_column from foobar;
    select SOME_COLUMN FROM FOOBAR;
    select Some_ColumN from FooBAR;
    

    我建议您重新创建不带任何引号的表,然后您可以随意编写表名和列名(只要不使用双引号)。

    有关(引用的)标识符的更多详细信息在手册中:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

    【讨论】:

    • 这对我有用!非常感谢,我刚开始学习 Postgres,新手应该注意的一个问题是 agAdminIII 会将对象名称用引号括起来。我不认为我会从现在开始使用 GUI 工具...
    • @DynaWeb:你应该使用any引号。这也是我不喜欢 pgAdmin 的原因之一。
    猜你喜欢
    • 2015-11-05
    • 2019-07-31
    • 2015-04-01
    • 2022-01-04
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多