我正试图从另一台服务器恢复使用此命令获取的pg_dump。
sudo -u postgres pg_dump --verbose --format=custom --file=pg-backup.sql -U postgres salesDB
在我复制了pg-backup.sql文件之后,我正试图用这个命令进行恢复
sudo -u postgres pg_restore --verbose --jobs=`nproc` -f pg-backup.sql
pg-backup.sql文件为13GB。pg恢复已经运行了4个小时,一直在屏幕上滚动数据。没有错误。
但是当我从psql会话执行此语句时
SELECT pg_size_pretty(pg_database_size('salesDB'));
我的尺码是5377 kB。什么?到目前为止,它应该至少是1GB。我完全迷路了。所有这些数据都在我的屏幕上滚动,我无法证明它会去任何地方。没有磁盘使用。
帮助
在pg_restore命令中尝试不使用"-f"标志。此外,您可能希望尝试创建空的salesdb数据库并传入"-d salesdb"。请注意,数据库名称将折叠为小写,除非它是在双引号内创建的。
添加了示例步骤,以显示数据库的大小随着恢复运行而增加
-- sample pg_dump command
pg_dump -f testdb.out -Fc src_test_db
-- create the db to restore into
createdb sometestdb
-- restore with 4 parallel jobs, from the "testdb.out" file, into the db "sometestdb"
time pg_restore --dbname=sometestdb --jobs=4 testdb.out
-- In another window, every few seconds, you can see the db growing
psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))"
pg_size_pretty
----------------
4920 MB
psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))"
pg_size_pretty
----------------
4920 MB
psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))"
pg_size_pretty
----------------
5028 MB
psql -d postgres -c "select pg_size_pretty(pg_database_size('sometestdb'))"
pg_size_pretty
----------------
5371 MB
RESOLVED-语法错误-f
(输出文件)参数据我所知是无用的。我需要指定pg_restore
使用的文件,而不使用任何标志,仅作为命令行中的最后一个元素。需要-d salesdb
参数。我有16个cpu,所以我设置了-j 15
,这似乎很有帮助。我最后的命令行是
sudo -u postgres pg_restore -d salesdb --jobs=15 backup10.sql
然后我用pg_database_size
函数得到了非常快的大小增量。
它正在按应有的方式生长。
在我看来,您似乎一直在告诉pg_restore
将转储的内容打印到显示器上,而不是将其恢复到数据库中。您指定了--dbname
吗?
就我个人而言,我认为pg_restore
的命令行语法不是特别直观,如果我有时间的话,这是我想在Pg.中改进的地方之一