postgresql Postgres.app:pg_restore挂起

i34xakig  于 2022-12-23  发布在  PostgreSQL
关注(0)|答案(4)|浏览(282)

我正在尝试对系统上的pg_restore命令进行故障排除。我已经安装了Postgresapp,并且在PATH中包含了它的二进制文件。psqlpg_dump等命令似乎工作正常,运行which pg_restore给予预期的结果。

$ which pg_restore
/Applications/Postgres.app/Contents/MacOS/bin/pg_restore

问题是pg_restore看起来什么都不做。当我在终端运行它时,没有输出,无论是到控制台还是到logs。无论我传入什么参数,包括--verbose开关,都是如此。运行它确实会导致pg_restore进程出现在我的活动监视器中,但这个进程不使用任何CPU。除此之外,什么都不会发生。
还有其他人看过这个问题吗?你有什么让pg_restore工作的建议吗?

kzipqqlq

kzipqqlq1#

我想我知道了。
我运行的命令在用户名后面包含了一个额外的换行符。
就像,我在尝试执行这个

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myusername
-d mydb latest.dump

而不是这个

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myusername -d mydb latest.dump

由于某种原因,额外的linebreak会把事情弄得一团糟。一旦我删除了它,pg_restore就能正常工作了。

lbsnaicq

lbsnaicq2#

我从an answer to another question那里得到了提示; -f选项并不执行您可能认为它执行的操作(或者无论如何,我认为它执行的操作😅),即使您使用的是“自定义”格式转储(即,不是像|>那样随shell重定向提供的转储)。

  • 错误:pg_restore -f filename.dump-等待来自STDIN的一系列命令,恢复到filename.dump中的数据库
  • 正确:pg_restore -d database filename.dump-恢复filename.dumpdatabase.

出于某种原因,我认为自定义转储包含数据库名称,因此您根本不需要提供它。

f0brbegy

f0brbegy3#

我也无缘无故地卡住了,我从pg_restore -U seed -h localhost -p 5432 -f dump.backup -C --verbose换成了pg_restore -d seed -U seed -h localhost -p 5432 < dump.backup,效果很好。
如果这能帮到什么人。

relj7zay

relj7zay4#

有时如果你有长时间运行的查询,你需要停止它,这样pg_restore就不会卡住。
运行此脚本:

SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE state = 'active' and pid <> pg_backend_pid();

https://www.sqlprostudio.com/blog/8-终止-取消-长时间运行的postgres-查询#:~:text=终止%20所有%20查询,在%20特殊%20情况下%20使用。

相关问题