由于空白字符串被视为不存在的数据,无法从 pg_dump 恢复数据
Cannot restore data from pg_dump due to blank strings being treated as nonexistant data
我目前在 PostgreSQL 9.3.9 服务器上有一个数据库,我正在以最简单的方式使用 pgdump 进行备份,例如 pg_dump orb > mar_9_2018.db
.
其中一个 tables (linktags) 具有以下定义:
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
(docker container restore) table returns empty because of the following error -
ERROR: missing data for column "tagval"
CONTEXT: COPY linktags, line 737: "1185 9325"
setval
我检查了 db 文件,发现缺少一些我希望得到某种信息的选项卡,显然恢复过程也是如此。
我也验证了数据库中的值是一个空字符串。
所以 -
- 是否有一种惯用的方法来备份和恢复我丢失的 postgres 数据库?
- 我的版本是否足够旧,pg_dump 的这个版本应该有一些特殊的考虑?
我只是在恢复这个错误吗?
编辑:
我做了一些进一步的研究,发现我在最初的 NULL 检查中是不正确的,而是导致问题的空白字符串。
如果我举一个例子 table 使用空字符串,然后是空白字符串,我可以看到 NULL 换行但空白没有
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
选项不会发生这种情况(不会生成插入语句)。
我目前在 PostgreSQL 9.3.9 服务器上有一个数据库,我正在以最简单的方式使用 pgdump 进行备份,例如 pg_dump orb > mar_9_2018.db
.
其中一个 tables (linktags) 具有以下定义:
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
(docker container restore) table returns empty because of the following error -
ERROR: missing data for column "tagval"
CONTEXT: COPY linktags, line 737: "1185 9325"
setval
我检查了 db 文件,发现缺少一些我希望得到某种信息的选项卡,显然恢复过程也是如此。
我也验证了数据库中的值是一个空字符串。
所以 -
- 是否有一种惯用的方法来备份和恢复我丢失的 postgres 数据库?
- 我的版本是否足够旧,pg_dump 的这个版本应该有一些特殊的考虑? 我只是在恢复这个错误吗?
编辑: 我做了一些进一步的研究,发现我在最初的 NULL 检查中是不正确的,而是导致问题的空白字符串。
如果我举一个例子 table 使用空字符串,然后是空白字符串,我可以看到 NULL 换行但空白没有
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
选项不会发生这种情况(不会生成插入语句)。