自動生成されたシーケンス (SERIAL 列用に作成されたシーケンスなど) と親テーブルとの関係は、シーケンス所有者属性によってモデル化されます。
この関係は、ALTER SEQUENCE コマンドの OWNED BY 句を使用して変更できます。
例: ALTER SEQUENCE foo_id OWNED by foo_schema.foo_table
テーブル 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' の間のリンクです。レコードを所有関係に結合します ( table )
このクエリは、データベース内のすべてのシーケンス -> テーブルの依存関係を返します。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' ;