PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 14/11/2016 12:17:50

Geo-x
Membre

Lister noms de colonnes associées à une séquence

Bonjour @tous.

J'essaie de construire une requête permettant de lister les colonnes concernées par une séquence.

Je sais lister les séquences :

SELECT * FROM pg_class c WHERE c.relkind = 'S';

mais je n'arrive pas à trouver l'endroit ou je peux trouver la colonne associée.

Auriez-vous une idée ?

Par avance merci.

Geo-x

Hors ligne

#2 14/11/2016 13:12:24

rjuju
Administrateur

Re : Lister noms de colonnes associées à une séquence

C'est un problème un peu complexe, car il n'est pas nécessaire s'associer une séquence à une colonne.

Néanmoins, dans le cas le plus simple (création d'une colonne de type serial ou bigserial), vous pouvez trouver l'information dans pg_depend. Par exemple :

SELECT seq.relname as sequence, t.relname as table_name, a.attname as column_name
FROM pg_class seq
JOIN pg_depend d ON seq.oid = d.objid
JOIN pg_class t ON t.oid = d.refobjid
JOIN pg_attribute a on a.attrelid = t.oid AND a.attnum = d.refobjsubid
WHERE seq.relkind = 'S'
AND d.refobjsubid > 0;

(requête pas vraiment testée, mais c'est l'idée)

Hors ligne

#3 14/11/2016 14:23:05

Geo-x
Membre

Re : Lister noms de colonnes associées à une séquence

Bonjour Julien et merci de votre réponse.

Quand vous dites qu'il n'est pas forcément nécessaire d'associer une séquence à une colonne, je ne comprends pas, à quoi peut être rattachée une séquence autre que des colonnes ?

Hors ligne

#4 14/11/2016 14:29:26

rjuju
Administrateur

Re : Lister noms de colonnes associées à une séquence

Rien ne vous empêche de créer une séquence, et de l'utiliser pour renseigner un champ d'une ou plusieurs table.  Dans ce cas la séquence n'aura pas de dépendance avec des colonnes.  De plus si vous créez une séquence, et que vous modifier la clause default d'une colonne pour utiliser la séquence, la dépendance ne sera pas non plus présente.  Donc la requête ci dessus ne permet de détecter que les séquences créées parce qu'un type (big)serial a été utilisé.

Hors ligne

#5 14/11/2016 14:34:28

Geo-x
Membre

Re : Lister noms de colonnes associées à une séquence

Ah oui d'accord, je n'avais pas pensé à ces possibilités, merci du partage de savoir.

Si je résume, il n'est donc pas possible de détecter les colonnes impactées par une séquence, à moins qu'elles ne soient directement créées en serial.

Merci beaucoup pour toutes ces précisions Julien.

Geo-x

Hors ligne

Pied de page des forums