Per ottenere un OID di tabella, esegui il cast al tipo di identificatore oggetto regclass
(mentre connesso allo stesso DB):
SELECT 'mytbl'::regclass::oid;
Questo trova la prima tabella (o vista, ecc.) con il nome dato lungo il search_path
o solleva un'eccezione se non trovata.
Schema-qualifica il nome della tabella per rimuovere la dipendenza dal percorso di ricerca:
SELECT 'myschema.mytbl'::regclass::oid;
In Postgres 9.4 o in seguito puoi anche usare to_regclass('myschema.mytbl')
, che non genera un'eccezione se la tabella non viene trovata:
- Come verificare se esiste una tabella in un determinato schema
Quindi devi solo interrogare la tabella del catalogo pg_attribute
per l'esistenza della colonna:
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)