ami*_*ion 8 linux postgresql virtual-machine pg-restore
我使用PostgreSQL作为我的数据库.
我已经SCPed一个.SQL在我的远程Ubuntu虚拟机文件.
我做了sudo su - postgres并创建了一个DB.
然后我切换到我的原始帐户并尝试这个:
sudo -su postgres pg_restore < temp.sql
该命令成功运行.
但当我再次切换回postgres用户并使用\ dt检查数据库中的表列表时,我发现没有表格.
我究竟做错了什么?
小智 11
'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
Run Code Online (Sandbox Code Playgroud)
我自己对不同风格的pg_restore的体验表明,我需要多次指定转储文件的格式,即使它是"本机"格式,尽管手册页指示它会检测格式.
pg_restore -d my_new_database -Fc temp.dump
Run Code Online (Sandbox Code Playgroud)
这只是一个猜测,但我想如果表实际上已经恢复,没有指定数据库,它们就被转储到默认数据库中.您可以通过列出'postgres'数据库中的表来检查这一点(应该没有).
postgres=#\c postgres
You are now connected to database "postgres" as user "postgres".
postgres=#\dt
No relations found.
Run Code Online (Sandbox Code Playgroud)
如果您的表确实还原到默认数据库,则会列出它们.
纯文本SQL文件需要区别对待,通常使用psql通过SQL命令执行.
psql -d my_database < temp.sql
Run Code Online (Sandbox Code Playgroud)
假设您生成了类似于以下内容的数据库备份:
pg_dump -a --inserts databasename > exportfilename.sql
Run Code Online (Sandbox Code Playgroud)
尝试像这样恢复您的文件:
psql databasename -f exportfilename.sql
Run Code Online (Sandbox Code Playgroud)
pg_restore上面提到的Postgres仅用于dump文件,您不能像那样恢复它。在官方 postgres.org 网站上查看此答案
基本上你不要使用pg_restore与sql文件--->
https://www.postgresql.org/message-id/AANLkTi%3DAqmWrUR4f8%2BEfCHzP%2BQrL1%3DunRLZp_jX7SoqF%40mail.gmail.com
| 归档时间: |
|
| 查看次数: |
9120 次 |
| 最近记录: |