Aby uzyskać OID tabeli, rzutuj na identyfikator obiektu typu regclass
(podczas połączenia z tą samą bazą danych):
SELECT 'mytbl'::regclass::oid;
Spowoduje to znalezienie pierwszej tabeli (lub widoku itp.) o podanej nazwie wzdłuż search_path
lub zgłasza wyjątek, jeśli nie zostanie znaleziony.
Zakwalifikuj schematowo nazwę tabeli, aby usunąć zależność od ścieżki wyszukiwania:
SELECT 'myschema.mytbl'::regclass::oid;
W Postgresie 9.4 lub później możesz również użyć to_regclass('myschema.mytbl')
, co nie powoduje wyjątku, jeśli tabela nie zostanie znaleziona:
- Jak sprawdzić, czy tabela istnieje w danym schemacie
Następnie wystarczy wysłać zapytanie do tabeli katalogu pg_attribute
za istnienie kolumny:
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)