在postgres中恢复转储后,一些主键丢失了

时间:2015-06-02 14:02:00

标签: postgresql

使用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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎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>