Die Beziehung zwischen automatisch generierten Sequenzen (z. B. solchen, die für SERIAL-Spalten erstellt wurden) und der übergeordneten Tabelle wird durch das Sequenzbesitzerattribut modelliert.
Sie können diese Beziehung mit der OWNED BY-Klausel des Befehls ALTER SEQUENCE ändern
zB ALTER SEQUENCE foo_id OWNED von foo_schema.foo_table
um festzulegen, dass es mit der Tabelle foo_table verknüpft wird
oder ALTER SEQUENCE foo_id OWNED by NONE
um die Verbindung zwischen der Sequenz und einer beliebigen Tabelle zu unterbrechen
Die Informationen zu dieser Beziehung werden in der Katalogtabelle pg_depend gespeichert .
Die Verknüpfungsbeziehung ist die Verknüpfung zwischen pg_depend.objid -> pg_class.oid WHERE relkind = 'S' - die die Sequenz mit dem Verknüpfungsdatensatz verknüpft, und dann pg_depend.refobjid -> pg_class.oid WHERE relkind = 'r', die die verknüpft Datensatz mit der Eigentümerbeziehung verbinden (Tabelle)
Diese Abfrage gibt alle Sequenz-> Tabellenabhängigkeiten in einer Datenbank zurück. Die where-Klausel filtert es so, dass es nur automatisch generierte Beziehungen enthält, wodurch es darauf beschränkt wird, nur Sequenzen anzuzeigen, die von Spalten vom Typ SERIAL erstellt wurden.
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' ;