在PostgreSQL中恢复dump后,一些主键丢失了。

9

使用pg_dump命令导出数据库如下:

pg_dump --verbose --host=<host> --username=<user> -W --encoding=UTF-8 -j 10 --file=dump_bak  --format=d --dbname=<database>

并尝试使用以下方式重新导入它:

pg_restore -d <database> --host=<host> -n public --username=<user> -W --exit-on-error --format=d -j 10 --verbose dump_bak

我们缺少一些主键。看起来有一些已经恢复了,但不是全部。

有什么想法吗?


2
还原过程中有任何错误信息吗? - JiriS
它们是在所有表中缺失,还是在几个表中缺失,还是只在一个表中缺失? - mike.k
1
恢复期间没有出现错误消息。它们在大多数表格中缺失,但并非全部缺失。 - Uwe Allner
1个回答

3

看起来Postgres在现有连接方面存在一些错误。我们已经找到了一个解决方法:

使用以下命令转储它:

pg_dump --verbose --host=<dbhost> --username=<username> --encoding=UTF-8 --file=<dumpfile> --format=d --jobs=10 --dbname=<dbname>

使用以下命令进行还原:

export PGPASSWORD="<pwd>"

#prevent new connections, kill existing connections
sudo -u postgres /usr/bin/psql -q -c "update pg_database set datallowconn = 'false' where datname = '<dbname>'; SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '<dbname>';"

#kick db
sudo -u postgres dropdb <dbname>

#recreate it
sudo -u postgres createdb <dbname>

#allow connections again
sudo -u postgres /usr/bin/psql -q -c "update pg_database set datallowconn = 'true' where datname = '<dbname>';"

#import data from dump
pg_restore --verbose -d <dbname> --host=$1 --username=<username> -j 4 <dumplocation>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接