有人可以帮我弄这个吗?我需要使用脚本找出数据库中的所有对象。我需要这个的原因是,我被要求更改所有数据库对象的所有者,因此我需要首先列出所有对象。
问问题
1229 次
4 回答
2
我想你可能想要REASSIGN OWNED代替。无需识别所有对象,只需识别用户。
于 2013-01-17T13:25:23.423 回答
1
在 PostgreSQL(或几乎任何其他 RDBMS)中,我建议查看元数据表(系统目录)。
例子。你想要所有的表:
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;
将为您提供所有表格的列表。您可以使用查询来构建脚本来更改所需表的所有权。
同样,您可以查询目录中的其他视图/表以获取其他对象类型(序列、索引,您可以命名)。
于 2013-01-17T13:22:16.820 回答
1
如果您将每个对象从角色更改A
为角色B
,您可能会喜欢REASSIGN OWNED
:
REASSIGN OWNED BY A TO B
于 2013-01-17T13:25:57.007 回答
0
如果您可以执行 pg_dump 和 pg_restore 来创建新数据库,则在 pg_restore 上添加 --no-owner 标志并以您希望将所有权设置为的用户身份运行 pg_restore 应该可以解决此问题。
于 2013-01-17T17:34:43.907 回答