web-dev-qa-db-ja.com

textとpg_catalog.textの違いは何ですか?

私は、それぞれ独自の 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に変換されました。

textpg_catalog.textの違いは何ですか? 2つのスキーマをどのように同等と見なすことができますか?

2
Adam Matan

これらは、デフォルトのインストールでは同じものです。

pg_catalog.textは、タイプ名textのスキーマ修飾バージョンです。

search_pathalwaysには、自動的にpg_catalogが含まれます。 ドキュメントごと:

publicおよびユーザーが作成したスキーマに加えて、各データベースにはpg_catalogスキーマが含まれています。これには、システムテーブルとすべての組み込みデータ型、関数、および演算子が含まれています。 pg_catalogは常に事実上、検索パスの一部です。パスで明示的に指定されていない場合は、パスのスキーマを検索する前に暗黙的に検索されます。これにより、組み込み名が常に検索可能になります。ただし、ユーザー定義の名前で組み込みの名前を上書きする場合は、検索パスの最後にpg_catalogを明示的に配置できます。

大胆な強調鉱山。このようなことをすると、Postgresは自動的にスキーマで修飾された名前をテキスト表現で開始しますが、そうでなければ別の方法で解決されます。それはおそらくあなたが見るものです。現在のsearch_pathを確認するには:

SHOW search_path;

密接に関連:

7