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

15

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

我已经将一个.sql文件通过SCP传输到了我的远程Ubuntu虚拟机上。

我执行了sudo su - postgres并创建了一个数据库。

然后我切换回了我的原始账户并尝试执行以下命令:

sudo -su postgres pg_restore < temp.sql

该命令成功运行。

但是当我再次切换回postgres用户并使用\dt命令检查表的列表时,我发现没有表格。

我做错了什么?

3个回答

23

'pg_restore'旨在恢复由'pg_dump'生成的文件。

来自手册:

pg_restore是一个实用程序,用于从非纯文本格式之一中由pg_dump(1)创建的存档还原PostgreSQL数据库。

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

这只是一个猜测,但我认为如果表没有指定数据库而被恢复,它们会被倒入默认数据库中。您可以通过在“postgres”数据库中列出表来检查这一点(应该没有表)。

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

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

纯文本SQL文件需要以不同的方式处理,通常使用psql命令执行。

psql -d my_database < temp.sql

我已经创建了转储并标记了创建数据库选项“是”。因此,我认为我不需要数据库名称。但是,在指定数据库名称后,它起作用了。谢谢! - amitection
@ameitection - 很高兴我能帮到你!你不是唯一一个被这个问题绊倒的人。我怀疑是因为我也遇到过这个问题。 - lavajumper

7

这个备份文件必须存在于特定的目录中吗? - Asma Rahim Ali Jafri
备份文件可以在您的本地系统中任何位置创建。 - d1jhoni1b

0

当我使用ubuntu用户在终端中运行psql命令时,遇到了同样的问题。该命令会以内存不足错误结束。

然后我使用sudo -i -u postgres切换到postgres用户。

从那里,我只需像上面提到的那样运行psql databasename -f databasefilebackup.sql


这个 databasefilebackup.sql 文件存在于特定的目录中还是可以在我的电脑上任何地方找到? - Asma Rahim Ali Jafri

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