0

值得注意的信息

  • 我在 Windows 7 64 位上使用Postgresql 9.2 。它是使用Postgresql 网站提供的安装程序安装的
  • 我以 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以首先查看我新创建的模式它不需要完全限定schemaName.tableName

4

1 回答 1

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

于 2012-12-03T22:47:46.923 回答