我使用以下命令在不同服务器上的数据库上执行备份,该服务器的角色与我需要的不同:

pg_dump -Fc db_name -f db_name.dump

然后,我将备份复制到另一台服务器上,在那里我需要恢复数据库,但没有用于该数据库的所有者.假设数据库有所有者owner1,但在不同的服务器上,我只有owner2,我需要恢复该数据库并更改所有者.

恢复时我在另一台服务器上执行的操作:

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump

但是,当运行恢复时,我收到以下错误:

pg_restore: [archiver (db)] could not execute query: ERROR:  role "owner1" does not exist

我如何指定它才能更改所有者?或者这是不可能的?

推荐答案

您应该使用--no-owner选项,这会阻止pg_restoretry 将对象的所有权设置为原始所有者.取而代之的是,对象将由--role指定的用户拥有

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump

pg_restore doc

Database相关问答推荐

为Postgres数据库字段创建复合索引

在保持抽象的同时将格式化文本存储在数据库中

您如何使两个相关但独立的系统保持同步?

Android:我可以对多个数据库文件使用一个 SQLiteOpenHelper 类吗?

SQL Server 中的Is Identity列属性是什么意思?

授予对具有特定前缀的多个表的权限

便携式(PHPPass)密码哈希.我应该使用它们吗?

nodejs和数据库如何通信 ?

NoSql DB 和 OO Db 有什么区别?

使 H2 将引用的名称和未引用的名称视为相同

对百万行表,MySQL 的 LIKE 查询的性能怎样?

怎样有效存储 7.300.000.000 行?

SQL Server 简单插入语句超时

如何在大型数据库中使用 typeahead.js

为数据库应用程序留下审计跟踪/更改历史的有效策略?

MySQL是否允许使用点创建数据库?

在 Rails 中销毁/删除数据库

MySQL 中 NOW()、SYSDATE() 和 CURRENT_DATE() 之间的区别

ManyToOneRel 和 ForeignKey 的区别?

在两列之间 Select 最近的日期