有人可以帮我吗?我需要使用脚本在数据库中找出所有对象。我需要这个的原因是,我被要求更改所有数据库对象的所有者,所以我需要先列出所有对象。
答案 0 :(得分:2)
我想你可能想要REASSIGN OWNED。无需识别所有对象,只需识别用户。
答案 1 :(得分:1)
在PostgreSQL(或几乎任何其他RDBMS)中,我建议你看一下元数据表(system catalog)。
实施例。你想要所有的表:
db => \d pg_tables
View "pg_catalog.pg_tables"
Column | Type | Modifiers
-------------+---------+-----------
schemaname | name |
tablename | name |
tableowner | name |
tablespace | name |
hasindexes | boolean |
hasrules | boolean |
hastriggers | boolean |
db => select tablename from pg_tables;
将为您提供所有表格的列表。您可以使用查询来构建脚本以更改所需表的所有权。
类似地,您可以查询目录中的其他视图/表以获取其他对象类型(序列,索引,您为其命名)。
答案 2 :(得分:1)
如果您要将每个对象从角色A
更改为角色B
,则可能需要REASSIGN OWNED
:
REASSIGN OWNED BY A TO B
答案 3 :(得分:0)
如果您可以执行pg_dump和pg_restore来创建新数据库,则在pg_restore上添加--no-owner标志并以您希望设置所有权的用户身份运行pg_restore应该适用于此。