我希望使用
pg_restore
导入 PostgreSQL 16 数据库,但是我遇到了数据库和表的所有权问题。
我希望数据库由
root
(确实如此)拥有,表由 ibrox
用户拥有。
CREATE DATABASE template_crmpicco_1872 TEMPLATE template0 ENCODING 'UTF8'
GRANT ALL ON DATABASE template_crmpicco_1872 TO ibrox
当我尝试使用
ibrox
用户恢复数据库时,出现此错误:
Command /usr/bin/pg_restore --disable-triggers -d template_crmpicco_1872 -h crmpiccopg.anh73jdk19.us-east-1.rds.amazonaws.com -n public -U ibrox -O -x /tmp/tmpimy39zj2/template_crmpicco_1872
pg_restore: error: could not execute query: ERROR: permission denied for schema public
如何使用 PostgreSQL 16 实现这一目标?
在恢复数据之前,请授予用户对
CREATE
架构的 pzblic
权限:
GRANT CREATE ON SCHEMA public TO ibrox;
请注意,PostgreSQL v15 中的行为发生了变化。在此之前,每个人都可以在
public
模式中创建对象。这构成了一个令人头痛的安全问题,因此行为发生了变化。