Para obtener un OID de tabla, convierta al tipo de identificador de objeto regclass
(mientras está conectado a la misma base de datos):
SELECT 'mytbl'::regclass::oid;
Esto encuentra la primera tabla (o vista, etc.) con el nombre dado a lo largo de search_path
o genera una excepción si no se encuentra.
Esquema:califique el nombre de la tabla para eliminar la dependencia de la ruta de búsqueda:
SELECT 'myschema.mytbl'::regclass::oid;
En Postgres 9.4 o posterior, también puede usar to_regclass('myschema.mytbl')
, que no genera una excepción si no se encuentra la tabla:
- Cómo verificar si una tabla existe en un esquema dado
Entonces solo necesita consultar la tabla de catálogo pg_attribute
por la existencia de la columna:
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)