如何使用 PostgreSQL 将表和序列所有者更改为另一个用户?

Mia*_*ian 3 postgresql owner

在用户下创建这些表和序列postgres

表创建模式

SET search_path TO main;
CREATE TABLE table1 ...
CREATE TABLE table2 ...
CREATE TABLE table3 ...
Run Code Online (Sandbox Code Playgroud)

序列创建模式

CREATE SEQUENCE main.seq1...
CREATE SEQUENCE main.seq2...
CREATE SEQUENCE main.seq3...
Run Code Online (Sandbox Code Playgroud)

现在想将它们全部更改为另一个名为 的所有者user1。如何在不重新创建这些对象的情况下使用它们?

Lau*_*lbe 8

ALTER TABLE/SEQUENCE objectname OWNER TO somerole;
Run Code Online (Sandbox Code Playgroud)

您只能作为超级用户或作为新旧拥有角色的成员的角色来执行该操作。

如果您想同时对多个表执行此操作,请使用format生成脚本:

SELECT format(
          'ALTER TABLE %I OWNER TO somerole;',
          oid::regclass
       )
FROM pg_class WHERE relname LIKE 'table%';
Run Code Online (Sandbox Code Playgroud)

然后执行该脚本。如果您正在使用psql,则可以使用\gexec在一条语句中执行此操作:

SELECT format(
          'ALTER TABLE %I OWNER TO somerole;',
          oid::regclass
       )
FROM pg_class WHERE relname LIKE 'table%' \gexec
Run Code Online (Sandbox Code Playgroud)