web-dev-qa-db-ja.com

pg_restore警告列Xのタイプが不明です

私はPostgreSQL 9.1からダンプを実行し、PostgreSQL 9.4で復元してこの警告を受けています

pg_restore: WARNING:  column "foobar" has type "unknown"
DETAIL:  Proceeding with relation creation anyway.

しかし、復元後、列「foobar」タイプが定義され、正しいことを確認できます。

この警告の原因は何ですか?

6
Phill Pafford

CREATE VIEWまたはCREATE TABLE... AS SELECT作成するリレーションの列タイプを推測する必要があります。たとえば、文字列リテラルだけの場合など、コンテキストがデータ型を推測するのに十分でない場合があります。この場合、unknownとして作成されます。

例:

 test => CREATE VIEW testview AS SELECT 'bla' AS foobar; 
警告:列「foobar」のタイプは「不明」です。 ____。]ビューを作成

結果:

 test =>\d testview 
 View "public.testview" 
 Column |タイプ|修飾子
 -------- + --------- + ----------- 
 foobar |不明| 
 

このビューがpg_dumpedおよびpg_restoredである場合、列はunknownとして作成され、警告が再度表示されます。

pg_restore:警告:列「foobar」のタイプは「不明」です
詳細:とにかく関係の作成を続行します。

テーブル/ビューは、次のように、必要なときに列への明示的なキャストで始まるように作成する必要があります

CREATE VIEW testview AS SELECT  'bla'::text AS foobar;

私たちが推測できるのは、そもそもその警告のポイントです。

8
Daniel Vérité