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

Posted

技术标签:

【中文标题】Postgresql 角色无法访问其创建的架构【英文标题】:Postgresql role can't access its created schema 【发布时间】: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

【问题讨论】:

【参考方案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 的原因之一。

以上是关于Postgresql 角色无法访问其创建的架构的主要内容,如果未能解决你的问题,请参考以下文章

无法创建用户 postgres:角色“postgres”不存在

无法连接到 PostgreSQL 服务器:致命:角色“apache”不存在

Access 2010 访问PostgreSQL 无法更新

无法使用普通 Ubuntu Linux 用户访问 Django 中的 PostgreSQL 数据库

无法使用wix工具集创建postgresql数据库

WordPress:具有自定义角色的用户无法访问 wp-admin