Twi*_*ate 32 postgresql permissions
我正在尝试在一个命令行中更改同一架构下所有表的所有者。即:alter table schema_name.* owner to newowner。有没有办法做到这一点?
Eva*_*oll 29
有一个特定的权限命令可以做到这一点,RESASSIGN OWNED. 这会重新分配所有对象,而不仅仅是特定模式中的对象。
您可以ALTER TABLE使用以下命令生成命令,
SELECT format(
'ALTER TABLE %I.%I.%I OWNER TO %I;',
table_catalog,
table_schema,
table_name,
current_user -- or another just put it in quotes
)
FROM information_schema.tables
WHERE table_schema = 'mySchema';
Run Code Online (Sandbox Code Playgroud)
在 psql 中,您可以通过立即跟随它来运行它们 \gexec
小智 14
如果您可以查询架构中的表名,则可以生成查询以更改表所有权。
例如:
select 'ALTER TABLE ' || t.tablename || ' OWNER TO new_owner;'
from pg_tables t
where t.tableowner != 'rdsadmin';
Run Code Online (Sandbox Code Playgroud)
将返回查询以更改所有表的所有权:
ALTER TABLE schema_version OWNER TO ali;
ALTER TABLE users OWNER TO ali;
ALTER TABLE company OWNER TO ali;
ALTER TABLE books OWNER TO ali;
...
Run Code Online (Sandbox Code Playgroud)
那么你可以运行这些:)
我不知道有什么方法可以完全通过 psql 完成此操作,但是使用 bash,您可以使用以下命令列出数据库 $DB 中的表:
psql -tc "select tablename from pg_tables where schemaname = '${SCHEMA}';" ${DB}
Run Code Online (Sandbox Code Playgroud)
所有权可以通过以下方式转让给 $OWNER:
psql -c "alter table ${SCHEMA}.${table} owner to ${OWNER}" ${DB}
Run Code Online (Sandbox Code Playgroud)
把它串在一起给你:
$ for table in `psql -tc "select tablename from pg_tables where schemaname = '${SCHEMA}';" ${DB}` ; do psql -c "alter table ${SCHEMA}.${table} owner to ${OWNER}" ${DB} ; done
Run Code Online (Sandbox Code Playgroud)
$DB、$SCHEMA 和 $OWNER 分别代表数据库、模式(通常是“公共”)和新所有者的名称。
| 归档时间: |
|
| 查看次数: |
76079 次 |
| 最近记录: |