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"
名称不同,但FooBar
和foobar
名称相同(因为它们没有被引用)。
因为您这样做了,所以您必须总是引用表名和列名。
以下方法有效,因为没有引用标识符:
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”不存在