无法在远程 Linux 虚拟机上 pg_restore SQL 文件
Unable to pg_restore SQL file on remote Linux VM
我正在使用 PostgreSQL 作为我的数据库。
我的远程 Ubuntu VM 上有 SCPed 一个 .sql 文件。
我做了 sudo su - postgres
并创建了一个数据库。
然后我切换回原来的帐户并尝试这样做:
sudo -su postgres pg_restore < temp.sql
命令运行成功。
但是当我再次切换回 postgres 用户并使用 \dt 检查数据库中的表列表时,我发现没有表.
我做错了什么?
'pg_restore' 用于恢复由 'pg_dump'.
生成的文件
来自手册页
pg_restore is a utility for restoring a PostgreSQL database from an
archive created by pg_dump(1) in one of the non-plain-text formats.
https://www.postgresql.org/docs/9.2/static/app-pgrestore.html
如果您的文件是由 pg_dump 生成的,您可能至少需要告诉它要转储到哪个数据库:
pg_restore -d my_new_database temp.sql
我自己对 pg_restore 不同风格的经验表明,很多时候我需要指定转储文件的格式,即使它是 'native' 格式,尽管联机帮助页表明它会检测格式。
pg_restore -d my_new_database -Fc temp.dump
这只是一个猜测,但我在想,如果表真的恢复了,但没有指定数据库,它们就会被转储到默认数据库中。您可以通过列出 'postgres' 数据库中的表(应该有 none)来检查这一点。
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_restore
与sql
个文件一起使用--->
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
,如上所述。
我正在使用 PostgreSQL 作为我的数据库。
我的远程 Ubuntu VM 上有 SCPed 一个 .sql 文件。
我做了 sudo su - postgres
并创建了一个数据库。
然后我切换回原来的帐户并尝试这样做:
sudo -su postgres pg_restore < temp.sql
命令运行成功。
但是当我再次切换回 postgres 用户并使用 \dt 检查数据库中的表列表时,我发现没有表.
我做错了什么?
'pg_restore' 用于恢复由 'pg_dump'.
生成的文件来自手册页
pg_restore is a utility for restoring a PostgreSQL database from an archive created by pg_dump(1) in one of the non-plain-text formats.
https://www.postgresql.org/docs/9.2/static/app-pgrestore.html
如果您的文件是由 pg_dump 生成的,您可能至少需要告诉它要转储到哪个数据库:
pg_restore -d my_new_database temp.sql
我自己对 pg_restore 不同风格的经验表明,很多时候我需要指定转储文件的格式,即使它是 'native' 格式,尽管联机帮助页表明它会检测格式。
pg_restore -d my_new_database -Fc temp.dump
这只是一个猜测,但我在想,如果表真的恢复了,但没有指定数据库,它们就会被转储到默认数据库中。您可以通过列出 'postgres' 数据库中的表(应该有 none)来检查这一点。
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_restore
与sql
个文件一起使用--->
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
,如上所述。