Pour obtenir un OID de table, convertissez-le en type d'identifiant d'objet regclass
(tout en étant connecté à la même BD) :
SELECT 'mytbl'::regclass::oid;
Cela trouve la première table (ou vue, etc.) avec le nom donné le long du search_path
ou déclenche une exception si elle n'est pas trouvée.
Qualifiez schématiquement le nom de la table pour supprimer la dépendance au chemin de recherche :
SELECT 'myschema.mytbl'::regclass::oid;
Dans Postgres 9.4 ou plus tard, vous pouvez également utiliser to_regclass('myschema.mytbl')
, qui ne lève pas d'exception si la table n'est pas trouvée :
- Comment vérifier si une table existe dans un schéma donné
Ensuite, il vous suffit d'interroger la table de catalogue pg_attribute
pour l'existence de la colonne :
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass
AND attname = 'mycol'
AND NOT attisdropped -- no dropped (dead) columns
-- AND attnum > 0 -- no system columns (you may or may not want this)