无法在远程Linux虚拟机上pg_restore SQL文件



我使用PostgreSQL作为我的数据库。

我有SCPed a sql文件在我的远程Ubuntu VM.

我做了sudo su - postgres并创建了一个DB。

然后我切换回原来的帐户,并尝试如下:

sudo -su postgres pg_restore < temp.sql

command ran successfully.

但是当我再次切换回postgres user并使用dt检查db中的表列表时,我没有找到表。

我做错了什么?

'pg_restore'表示恢复由'pg_dump'生成的文件。

从手册页

pg_restore是一个用于从数据库中恢复PostgreSQL数据库的实用程序pg_dump(1)以一种非纯文本格式创建的存档。

https://www.postgresql.org/docs/9.2/static/app-pgrestore.html

如果你的文件是由pg_dump生成的,你可能至少需要告诉它要转储到哪个数据库:

pg_restore -d my_new_database temp.sql

我自己使用不同风格的pg_restore的经验表明,很多时候我需要指定转储文件的格式,即使它是"本机"格式,尽管手册指出它会检测该格式。

pg_restore -d my_new_database -Fc temp.dump

这只是一个猜测,但我认为如果表实际上恢复,没有指定db,他们被转储到默认数据库。您可以通过列出'postgres'数据库中的表(应该没有表)来检查这一点。

postgres=#c postgres
You are now connected to database "postgres" as user "postgres".
postgres=#dt
No relations found.

如果您的表恢复到默认数据库,它们将被列出。

纯文本SQL文件需要区别对待,通常通过使用psql的SQL命令执行。

psql -d my_database < temp.sql

假设您生成的数据库备份如下:

pg_dump -a --inserts databasename > exportfilename.sql

试着像这样恢复你的文件:

psql databasename -f exportfilename.sql

上面提到的Postgres pg_restore只意味着与dump文件一起使用,你不能像那样恢复它。在postgres.org官方网站

查看这个答案。

基本上你使用pg_restoresql文件->https://www.postgresql.org/message-id/AANLkTi%3DAqmWrUR4f8%2BEfCHzP%2BQrL1%3DunRLZp_jX7SoqF%40mail.gmail.com

在使用ubuntu用户的终端内运行psql命令时,我遇到了同样的问题。该命令将以out of memory错误结束。

我切换到postgres用户与sudo -i -u postgres

从这里我简单地运行psql databasename -f databasefilebackup.sql,如上所述。

相关内容

  • 没有找到相关文章

最新更新