我正在使用PostgreSQL作为我的数据库。
我已经将一个.sql文件通过SCP传输到了我的远程Ubuntu虚拟机上。
我执行了sudo su - postgres
并创建了一个数据库。
然后我切换回了我的原始账户并尝试执行以下命令:
sudo -su postgres pg_restore < temp.sql
该命令成功运行。
但是当我再次切换回postgres用户并使用\dt命令检查表的列表时,我发现没有表格。
我做错了什么?
我正在使用PostgreSQL作为我的数据库。
我已经将一个.sql文件通过SCP传输到了我的远程Ubuntu虚拟机上。
我执行了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命令执行。
psql -d my_database < temp.sql
pg_dump -a --inserts databasename > exportfilename.sql
psql databasename -f exportfilename.sql
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
命令时,遇到了同样的问题。该命令会以内存不足
错误结束。
然后我使用sudo -i -u postgres
切换到postgres用户。
从那里,我只需像上面提到的那样运行psql databasename -f databasefilebackup.sql
。