La relation entre les séquences générées automatiquement (telles que celles créées pour les colonnes SERIAL) et la table parent est modélisée par l'attribut de propriétaire de séquence.
Vous pouvez modifier cette relation à l'aide de la clause OWNED BY du ALTER SEQUENCE
par exemple, ALTER SEQUENCE foo_id OWNED par foo_schema.foo_table
pour le définir comme lié à la table foo_table
ou ALTER SEQUENCE foo_id OWNED by NONE
pour rompre la connexion entre la séquence et n'importe quelle table
Les informations sur cette relation sont stockées dans la table de catalogue pg_depend .
la relation de jointure est le lien entre pg_depend.objid -> pg_class.oid WHERE relkind = 'S' - qui relie la séquence à l'enregistrement de jointure, puis pg_depend.refobjid -> pg_class.oid WHERE relkind = 'r', qui relie le joindre l'enregistrement à la relation propriétaire (table)
Cette requête renvoie toutes les dépendances séquence -> table dans une base de données. La clause where le filtre pour n'inclure que les relations générées automatiquement, ce qui le restreint à n'afficher que les séquences créées par les colonnes de type 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' ;