9

我正在使用“ALTER SEQUENCE sequence OWNED BY table.column”来更改 Postgres 中的序列关联。有没有办法使用 \ds 或类似的东西来查看这些新信息?\ds 仍将表所有者显示为序列所有者。

4

2 回答 2

8
SELECT c.relname,u.usename 
  FROM pg_class c, pg_user u
 WHERE c.relowner = u.usesysid and c.relkind = 'S'
   AND relnamespace IN (
                        SELECT oid
                          FROM pg_namespace
                         WHERE nspname NOT LIKE 'pg_%'
                           AND nspname != 'information_schema'
                        );
于 2013-07-14T14:25:39.143 回答
7

OWNED BY table.column更改关联的列;OWNER TO newowner更改拥有该序列的角色。所有者角色是 中显示的内容\ds。我不知道psql查看序列的链接列的命令。OWNED BY 主要用于在删除引用列时级联删除关联序列。

您可以通过针对系统目录表pg_classpg_dependpg_attribute构建查询来了解所拥有的列。我不确定 pg_depend 的所有确切语义,但是这个查询应该向您显示序列的列依赖关系:

select tab.relname as tabname, attr.attname as column
from pg_class as seq
join pg_depend as dep on (seq.relfilenode = dep.objid)
join pg_class as tab on (dep.refobjid = tab.relfilenode)
join pg_attribute as attr on (attr.attnum = dep.refobjsubid and attr.attrelid = dep.refobjid)
where seq.relname = 'sequence';
于 2012-03-28T18:42:32.747 回答