我最近将本地 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
上面引用的语句总是会产生错误。
|