7

我正在尝试从另一台服务器恢复使用此命令获取的 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-restore 已经运行了 4 个小时,一直在我的屏幕上滚动数据。没有错误。

但是当我从 psql 会话中执行此语句时

SELECT pg_size_pretty(pg_database_size('salesDB'));

我得到 5377 kB 的大小。什么?它现在至少应该是 1GB。我完全迷路了。所有这些数据都在我的屏幕上滚动,我无法证明它会去任何地方。没有磁盘使用。

帮助

4

3 回答 3

6

尝试在 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
于 2013-07-11T00:56:25.997 回答
5

RESOLVED - syntax error the -f (output file) parameter is useless as far as I can tell. I needed to specify the file for pg_restore to consume without any flag, only as the last element in the command line. The -d salesdb parameter was needed. I have 16 cpus so I set -j 15, that seemed to be very helpful. my final command line was

sudo -u postgres pg_restore -d salesdb --jobs=15 backup10.sql

Then I get very fast size increments with the pg_database_size function.

It's growing like it should.

于 2013-07-11T19:48:40.230 回答
2

在我看来,您一直在告诉pg_restore将转储的内容打印到显示器,而不是将其还原到数据库。你指定了一个--dbname

我个人认为pg_restore's 的命令行语法不是特别直观,如果我有时间,这是我想尝试在 Pg 中改进的事情之一。

于 2013-07-11T01:39:14.503 回答