我目前在PostgreSQL 9.3.9服务器上有一个数据库,该数据库以最简单的方式(例如pg_dump orb > mar_9_2018.db
)用pgdump备份。
其中一个表(链接标签)具有以下定义:
CREATE TABLE linktags (
linktagid integer NOT NULL,
linkid integer,
tagval character varying(1000)
);
尝试通过
在PostgreSQL 11.2上还原数据库时 cat mar_9_2018.db | docker exec -i pg-docker psql -U postgres
(泊坞窗容器还原)由于以下错误,表返回空-
ERROR: missing data for column "tagval"
CONTEXT: COPY linktags, line 737: "1185 9325"
setval
我检查了db文件,发现缺少一些我希望获得某种信息的选项卡,并且显然还原过程也是如此。
我还验证了数据库中的值是一个空字符串。
所以-
编辑: 我做了一些进一步的研究,发现在原始的NULL检查中我不正确,而是空字符串导致了问题。
答案 0 :(得分:3)
pg_dump
可以选择使用INSERT
代替COPY
pg_dump -d db_name --inserts
手册警告,这可能会使恢复速度变慢(并且转储文件更大)。即使出现一些不一致的情况,表也将填充有效行。
另一个问题是空表,pg_dump
生成空复制语句,如:
COPY config (key, value) FROM stdin;
\.
在这种情况下,您将在重新导入时遇到错误,例如:
ERROR: invalid input syntax for type smallint: " "
CONTEXT: COPY config, line 1, column group: " "
使用--insert
选项不会发生(不会生成insert语句)。