在postgres中恢复转储后,缺少一些主键

Uwe*_*ner 6 postgresql

像这样使用pg_dump转储数据库后:

pg_dump --verbose --host=<host> --username=<user> -W --encoding=UTF-8 -j 10 --file=dump_bak  --format=d --dbname=<database>
Run Code Online (Sandbox Code Playgroud)

并尝试通过以下方式重新导入它:

pg_restore -d <database> --host=<host> -n public --username=<user> -W --exit-on-error --format=d -j 10 --verbose dump_bak
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Uwe*_*ner 3

Postgres 似乎在现有连接方面存在一些问题。我们找到了解决方法:

将其转储为:

pg_dump --verbose --host=<dbhost> --username=<username> --encoding=UTF-8 --file=<dumpfile> --format=d --jobs=10 --dbname=<dbname>
Run Code Online (Sandbox Code Playgroud)

恢复它:

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>
Run Code Online (Sandbox Code Playgroud)