0

以下のコマンドを bash スローで実行すると、次のようになります。

エラー: リレーション "testschema.testtable" が存在しません。

コマンドライン:

psql -h "localhost" -d "postgres" -U "postgres" -c "select * from TestSchema.TestTable;"

スキーマではなく関係を検索するのはなぜですか? デフォルトのスキーマを検索するように設定するにはどうすればよいですか?また、複数のデータベースから複数のスキーマのリストをデフォルトのリストとして設定することはできますか?

4

1 に答える 1

5

スキーマではなく関係を検索するのはなぜですか?

TestSchema.TestTable リレーション(テーブル)ですI は完全修飾テーブル名です。

見つからない理由は、おそらく、二重引用符を使用してスキーマとテーブルを作成したためです。

create table "TestSchema"."TestTable" (...)

これにより、名前の大文字と小文字が区別され、名前を修飾するために常に引用符を使用する必要があります。「区切り識別子」(別名「引用識別子」)の詳細については、マニュアルを参照してください。

https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

デフォルトのスキーマを検索するように設定するにはどうすればよいですか

「スキーマの設定」ステートメントを参照してください: https://www.postgresql.org/docs/current/sql-set.html

コマンドを使用してデフォルトのスキーマを定義することもできますALTER USER

複数のデータベースからの複数のスキーマのリストをデフォルト リストとして設定できますか

はい、search_path 構成変数を設定します: http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-SEARCH-PATH

ALTER USERこれは、ステートメントを使用して永続的に設定することもできます。

于 2013-02-24T11:35:02.353 に答える