La relation entre les séquences générées automatiquement (telles que celles créées pour les colonnes SERIAL) et la table parente est modélisée par l'attribut propriétaire de la séquence.
Vous pouvez modifier cette relation à l'aide de la clause OWNED BY de la commande Commande ALTER SEQUENCE
par exemple ALTER SEQUENCE foo_id OWNED by foo_schema.foo_table
pour qu'il soit lié à la table foo_table
ou ALTER SEQUENCE foo_id OWNED by NONE
pour rompre la connexion entre la séquence et toute table
Les informations relatives à cette relation sont stockées dans le pg_depend catalogue table .
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 et ensuite pg_depend.refobjid -> pg_class.oid WHERE relkind = 'r' , qui relie l'enregistrement de jointure à 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 la filtre pour n'inclure que les relations générées automatiquement, ce qui la restreint pour n'afficher que les séquences créées par des 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' ;
1 votes
Il faut noter que vous faites la conversion de la mauvaise façon. Depuis qu'Oracle a racheté Sun, ils ont lentement tué MySQL, donc à moins que vous ne méprisiez votre client (auquel cas vous devriez tout simplement démissionner), vous devriez vous en tenir à PostgreSQL, car aucune société (pro-monopole ou non) ne peut venir, absorber PostgreSQL et le remplacer par sa propre base de données.
0 votes
@John Je dirais qu'il y a un milliard et une autres raisons de s'en tenir à postgres, et un milliard d'autres de ne jamais toucher à mysql, mais oui - votre point est toujours très valable :)
1 votes
@John à l'époque (2009) nous avions besoin d'une base de données plus simple à gérer - et mysql était mieux couplé à php