Relacja między automatycznie generowanymi sekwencjami (takimi jak te utworzone dla kolumn SERIAL) a tabelą nadrzędną jest modelowana przez atrybut właściciela sekwencji.
Możesz zmodyfikować tę relację za pomocą klauzuli OWNED BY pliku ALTER SEQUENCE
np. ALTER SEQUENCE foo_id OWNED by foo_schema.foo_table
aby ustawić, aby był powiązany z tabelą foo_table
lub ALTER SEQUENCE foo_id OWNED by NONE
aby przerwać połączenie między sekwencją a dowolną tabelą
Informacje o tej relacji są przechowywane w tabeli katalogu pg_depend .
relacja łączenia jest połączeniem między pg_depend.objid -> pg_class.oid WHERE relkind = 'S' - które łączy sekwencję z rekordem łączenia, a następnie pg_depend.refobjid -> pg_class.oid WHERE relkind = 'r', które łączy dołącz rekord do relacji będącej właścicielem (tabela)
To zapytanie zwraca wszystkie sekwencje -> zależności tabel w bazie danych. Klauzula where filtruje ją tak, aby zawierała tylko relacje generowane automatycznie, co ogranicza ją do wyświetlania tylko sekwencji utworzonych przez kolumny o typie 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' ;