0

特筆すべき情報

  • Windows 7 64 ビットでPostgresql 9.2を使用しています。Postgresql Web サイトが提供するインストーラーを使用してインストールされました。
  • postgres として postgresデータベースにログインしています
  • postgresユーザーの下にBryceTest スキーマを作成します
  • 表示するように構成search_pathします"brycetest, public"

この SQL は、pgAdmin-III が提供するクエリ ビルダーによって生成された場合、期待どおりに動作します。

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_pathschemaName.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 に答える