1 min read

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.

Find tables with specific column name in PostgreSQL database - PostgreSQL Data Dictionary Queries
Useful SQL queries for PostgreSQL to explore database schema.