0

有人可以帮我弄这个吗?我需要使用脚本找出数据库中的所有对象。我需要这个的原因是,我被要求更改所有数据库对象的所有者,因此我需要首先列出所有对象。

4

4 回答 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 回答