如何使用脚本查找数据库中的所有对象?

时间:2013-01-17 13:21:00

标签: postgresql

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

4 个答案:

答案 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应该适用于此。