我最近将本地 PostgreSQL 升级到了 v17。现在,当我使用 创建数据库转储时,在服务器(运行 PostgreSQL 16)上pg_dump -c导入该转储会导致以下警告:psql

WARNING:  no privileges could be revoked for "public"
WARNING:  no privileges were granted for "public"

我最初将警告归因于pg_dump现在包含命令ALTER SCHEMA public OWNER TO snafu;snafu作为本地 PostgreSQL 超级用户)并且模式public由服务器上的不同用户拥有的事实。

但是当我添加--no-owner参数pg_dump(以抑制更改所有权的命令)时,警告仍然出现。这是为什么?我之前在本地客户端上使用 PostgreSQL 14,在服务器上使用 PostgreSQL 16,那时从未出现过此问题。

比较pg_dump输出(v14 与 v17,没有--no-owner),我发现的唯一区别 – 除了ALTER SCHEMA上面引用的命令之外 – 是ALTER序列的命令:

CREATE SEQUENCE public.django_migrations_id_seq ... ;
# v14
ALTER TABLE public.django_migrations_id_seq OWNER TO django_db_user;
# v17
ALTER SEQUENCE public.django_migrations_id_seq OWNER TO django_db_user;

我检查了权限django_db_user,发现她只有表的权限,没有序列的权限——但命令CREATE SEQUENCE执行时没有警告。所以问题仍然是为什么ALTER TABLE语句 (v14) 不会触发警告,而ALTER SEQUENCE语句 (v17) 会触发警告。

public我可以转移模式的所有权来django_db_user暂时解决问题,但ALTER SCHEMA上面引用的语句总是会产生错误。

0