私は、それぞれ独自の RDS PostgreSQL 9. を備えた、クラシックな3つの環境設定(開発、ステージング、本番)を持っています。クライアント/サーバーのバージョンはpsql (9.3.5, server 9.3.3)
です。
スキーマの整合性を保つために、スキーマが異なる場合に通知する定期的なスキーマ差分ジョブがあります。
数日前、私はこれらの差分の多くを取得し始めました:
CREATE TABLE ...
...
< title pg_catalog.text,
< subtitle pg_catalog.text,
---
> title text,
> subtitle text,
ステージングのtext
フィールドは、製品でpg_catalog.text
に変換されました。
text
とpg_catalog.text
の違いは何ですか? 2つのスキーマをどのように同等と見なすことができますか?
これらは、デフォルトのインストールでは同じものです。
pg_catalog.text
は、タイプ名text
のスキーマ修飾バージョンです。
search_path
alwaysには、自動的にpg_catalog
が含まれます。 ドキュメントごと:
public
およびユーザーが作成したスキーマに加えて、各データベースにはpg_catalog
スキーマが含まれています。これには、システムテーブルとすべての組み込みデータ型、関数、および演算子が含まれています。pg_catalog
は常に事実上、検索パスの一部です。パスで明示的に指定されていない場合は、パスのスキーマを検索する前に暗黙的に検索されます。これにより、組み込み名が常に検索可能になります。ただし、ユーザー定義の名前で組み込みの名前を上書きする場合は、検索パスの最後にpg_catalog
を明示的に配置できます。
大胆な強調鉱山。このようなことをすると、Postgresは自動的にスキーマで修飾された名前をテキスト表現で開始しますが、そうでなければ別の方法で解決されます。それはおそらくあなたが見るものです。現在のsearch_path
を確認するには:
SHOW search_path;
密接に関連: