pg_restore 警告列 X 的类型未知

Phi*_*ord 6 postgresql datatypes dump restore

我正在从 PostgreSQL 9.1 转储并在 PostgreSQL 9.4 上恢复并收到此警告

pg_restore: WARNING:  column "foobar" has type "unknown"
DETAIL:  Proceeding with relation creation anyway.
Run Code Online (Sandbox Code Playgroud)

但是在恢复之后,我可以验证列“foobar”类型是否已定义且正确。

什么可能导致此警告?

Dan*_*ité 9

CREATE VIEW或者CREATE TABLE... AS SELECT必须推断要创建的关系的列类型。有时上下文不足以猜测数据类型,例如当它只是一个字符串文字时。在这种情况下,它被创建为unknown.

例子 :

test=> CREATE VIEW testview AS SELECT 'bla' AS foobar;
警告:“foobar”列的类型为“未知”
详细信息:无论如何都要继续创建关系。
创建视图

结果:

测试=> \d 测试视图
    查看“public.testview”
 专栏 | 类型 | 修饰符
--------+----------+-----------
 foob​​ar | 未知 |

如果此视图是 pg_dumped 和 pg_restored,则将创建该列,就像unknown再次提到的警告一样:

pg_restore:警告:列“foobar”的类型为“未知”
详细信息:仍然继续创建关系。

应创建表/视图以在需要时显式转换为列,如

CREATE VIEW testview AS SELECT  'bla'::text AS foobar;
Run Code Online (Sandbox Code Playgroud)

我们可以假设这是该警告的重点。