Postgresql角色无法访问其创建的架构

时间:2012-12-03 22:20:37

标签: database database-schema postgresql-9.2

值得注意的信息

  • 我在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 ,它不需要拥有完全限定的{{ 1}}

1 个答案:

答案 0 :(得分:0)

您使用双引号创建了表,因此它们现在区分大小写(根据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