PostgreSQL 9.0.13进行pg_restore操作,但没有证据表明正在使用磁盘空间。

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了。 我完全迷失了方向。所有这些数据都在我屏幕上滚动,但我无法证明它是否正在传输。没有磁盘使用情况。

求助


顺便说一句,恭喜你跟上了当前的补丁发布。我在这里看到太多的9.0.4了。 - Craig Ringer
3个回答

7

在pg_restore命令中尝试不使用“-f”标志。此外,您可以尝试创建空的salesdb数据库并传递“-d salesdb”。请注意,除非在双引号内创建,否则db名称将折叠为小写。

添加示例步骤以显示恢复正在运行时数据库的大小增长。

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

你的意思是说,每次执行恢复期间的pg_database_size函数时,我应该看到数据库大小增长,直到我看到它才正确吗? - Wade Jernigan
@WadeJernigan,我编辑了我的答案,展示出在pg_restore过程中数据库是增长的。 - bma
1
已解决 - 语法错误。据我所知,-f参数是无用的。我需要在命令行中指定文件供pg_restore消耗,而不需要任何标志,只需作为最后一个元素即可。需要使用-d salesdb参数。我有16个CPU,所以我设置了-j 15,这似乎非常有帮助。我的最终命令行是: - Wade Jernigan

5

已解决 - 语法错误 我认为-f输出文件)参数是无用的。我需要在命令行中指定pg_restore要读取的文件,而不使用任何标志,只需将其作为命令行中的最后一个元素即可。还需要-d salesdb 参数。我的计算机有16个CPU,因此我设置了-j 15 ,这似乎非常有帮助。我的最终命令行如下:

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

然后我使用pg_database_size函数获得了非常快的大小增量。

它正在按照预期增长。


我不是很熟悉这个论坛的运作方式,但请指向bma。他是正确的,谢谢。 - Wade Jernigan
2
我认为你只需要将你选择的答案“接受”为正确答案即可。 - bma

2

看起来你一直在告诉 pg_restore 将转储内容打印到显示器,而不是恢复到数据库中。 你是否指定了 --dbname

个人认为 pg_restore 的命令行语法并不特别直观,如果我有时间的话,我会尝试在Pg中改进它。


如果您指定了文件名(-f),则不能使用--dbname,但是似乎我只是在写入屏幕。因此,我删除了--verbose开关。现在过去了14个小时,屏幕上没有任何内容,也没有证据表明数据库正在增长。我需要一种方法来证明数据正在输入数据库中。我将尝试一些选择语句。我希望它能报告一个增长的大小。 - Wade Jernigan

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