За да получите OID на таблицата, приведете към идентификатора на обекта тип regclass
(докато е свързан към същата DB):
SELECT 'mytbl'::regclass::oid;
Това намира първата таблица (или изглед и т.н.) с даденото име по search_path
или повдига изключение, ако не е намерено.
Схематично квалифицирайте името на таблицата, за да премахнете зависимостта от пътя за търсене:
SELECT 'myschema.mytbl'::regclass::oid;
В Postgres 9.4 или по-късно можете също да използвате to_regclass('myschema.mytbl')
, което не предизвиква изключение, ако таблицата не бъде намерена:
- Как да проверите дали таблица съществува в дадена схема
След това трябва само да потърсите каталожната таблица pg_attribute
за съществуването на колоната:
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)