PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Déterminer l'OID d'une table dans Postgres 9.1 ?

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)