La relazione tra sequenze generate automaticamente (come quelle create per le colonne SERIAL) e la tabella padre è modellata dall'attributo proprietario della sequenza.
È possibile modificare questa relazione utilizzando la clausola OWNED BY del comando ALTER SEQUENCE
es. ALTER SEQUENCE foo_id PROPRIETARIO di foo_schema.foo_table
per impostarlo in modo che sia collegato alla tabella foo_table
o ALTER SEQUENCE foo_id PROPRIO da NESSUNO
per interrompere la connessione tra la sequenza e qualsiasi tabella
Le informazioni su questa relazione sono archiviate nella tabella del catalogo pg_depend .
la relazione di unione è il collegamento tra pg_depend.objid -> pg_class.oid WHERE relkind = 'S' - che collega la sequenza al record del join e quindi pg_depend.refobjid -> pg_class.oid WHERE relkind = 'r', che collega il unisci record alla relazione proprietaria (tabella)
Questa query restituisce tutte le sequenze -> dipendenze di tabelle in un database. La clausola where la filtra per includere solo le relazioni generate automaticamente, che le limita per visualizzare solo le sequenze create da colonne tipizzate 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' ;