Rechercher l’ensemble des tables contenant une colonne particulière
Saviez-vous qu'il était possible d'utiliser du SQL pour avoir des infos sur la structure de votre base de donnée ?
Il y a quelques temps, j’ai eu le besoin de renommer une colonne de notre base de donnée qui était présente dans de nombreuses tables de notre modèle. Il s’agissait de la colonne user_ipad_id
qui servait de clé étrangère entre notre table d’utilisateurs et toutes les données associées.
Afin de ne pas oublier une table dans l’opération, j’ai eu besoin de chercher une solution me permettant de lister toutes les tables de notre schéma PostgreSQL qui contenait une colonne user_ipad_id
.
SELECT t.table_schema,
t.table_name
FROM information_schema.tables t
INNER JOIN information_schema.columns c
ON c.table_name = t.table_name
AND c.table_schema = t.table_schema
WHERE c.column_name = 'user_ipad_id'
AND t.table_schema NOT IN ( 'information_schema', 'pg_catalog' )
AND t.table_type = 'BASE TABLE'
ORDER BY t.table_schema;
Une fois exécutée, la requête m’a affichée l’ensemble des tables que je recherchais et j’ai pu ensuite reprendre cette liste et m’en servir dans une migration Rails pour renommer les colonnes nécessaires.