繁体   English   中英

无法在远程 Linux VM 上 pg_restore SQL 文件

[英]Unable to pg_restore SQL file on remote Linux VM

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

我在远程 Ubuntu 虚拟机上SCP了一个.sql文件。

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

然后我切换回我的原始帐户并尝试了这个:

sudo -su postgres pg_restore < temp.sql

命令运行成功。

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

我做错了什么?

'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 通过 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 网站上查看此答案

基本上你使用带有sql文件的pg_restore ---> https://www.postgresql.org/message-id/AANLkTi%3DAqmWrUR4f8%2BEfCHZP%2BQrL1%3DunRLZp_jX7SoqF%40mail.gmail.com

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

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

从那里我只需运行psql databasename -f databasefilebackup.sql ,如上所述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM