自動生成されたシーケンス(SERIAL列用に作成されたシーケンスなど)と親テーブルの関係は、シーケンス所有者属性によってモデル化されます。
この関係は、ALTER SEQUENCEコマンドの OWNED BY句を使用して変更できます。
例:foo_schema.foo_tableによってALTER SEQUENCE foo_id OWNED
テーブルfoo_tableにリンクするように設定する
またはALTER SEQUENCE foo_id OWNED by NONE
シーケンスとテーブルの間の接続を切断する
この関係に関する情報は、pg_dependカタログテーブルに格納されます。
結合関係は、pg_depend.objid-> pg_class.oid WHERE relkind = 'S'-シーケンスを結合レコードにリンクし、次にpg_depend.refobjid-> pg_class.oid WHERE relkind = 'r'の間のリンクで、レコードを所有関係に結合する(テーブル)
このクエリは、データベース内のすべてのシーケンス->テーブルの依存関係を返します。where句は、自動生成された関係のみを含むようにフィルター処理します。これにより、SERIAL型付き列によって作成されたシーケンスのみを表示するように制限されます。
WITH fq_objects AS (SELECT c.oid,n.nspname || '.' ||c.relname AS fqname ,
c.relkind, c.relname AS relation
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace ),
sequences AS (SELECT oid,fqname FROM fq_objects WHERE relkind = 'S'),
tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r' )
SELECT
s.fqname AS sequence,
'->' as depends,
t.fqname AS table
FROM
pg_depend d JOIN sequences s ON s.oid = d.objid
JOIN tables t ON t.oid = d.refobjid
WHERE
d.deptype = 'a' ;