从pg_dump恢复数据库

时间:2017-07-05 12:33:06

标签: database postgresql psql pg-dump

我有非空数据库并通过以下方式进行备份:

pg_dump myBase > backup.sql

然后我必须删除db,现在我正在尝试从backup.sql恢复它。所以首先我通过以下方式创建数据库:

create database myBase

psql

授予权限

grant all privileges on database "myBase" to myUser

然后尝试通过以下方式从pg_dump恢复:

pg_dump myBase < backup.sql

我没有收到任何错误,但当我按\dt检查表时,它完全是空的。 我也试过恢复:

psql -h localhost -d myBase-U myUser-f backup.sql(没有错误,但也没有表格)

psql myBase < backup.sql(如上所述)

我对dbs有一点了解,所以我认为对于更有经验的用户来说这应该是显而易见的。

2 个答案:

答案 0 :(得分:1)

无法重现此问题:

postgres=# create database so;
CREATE DATABASE
postgres=# \c so
You are now connected to database "so" as user "postgres".
so=# create table so(i int);
CREATE TABLE
so=# insert into so values (1);
INSERT 0 1
so=# \! pg_dump so > /tmp/so.sql
so=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=# drop database so;
DROP DATABASE
postgres=# create database so;
CREATE DATABASE
postgres=# \c so
You are now connected to database "so" as user "postgres".
so=# \dt
No relations found.
so=# \! psql so -f /tmp/so.sql
SET
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
ALTER TABLE
REVOKE
REVOKE
GRANT
GRANT
so=# \dt
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | so   | table | postgres
(1 row)

答案 1 :(得分:0)

遇到相同的问题,请在此处找到解决方案:Unable to restore psql database from pg_dump with a different username

  

pg_dump dbname -O -x> backupname.sql

     

-O <-没有所有者            不要输出命令来设置对象所有权以匹配原始数据库

     

-x <-无特权            防止转储访问权限(授予/撤消命令)