För att få en tabell OID, casta till objektidentifieraren typ regclass
(medan du är ansluten till samma DB):
SELECT 'mytbl'::regclass::oid;
Detta hittar den första tabellen (eller vyn, etc.) med det angivna namnet längs search_path
eller gör ett undantag om det inte hittas.
Schema-kvalificera tabellnamnet för att ta bort beroendet av sökvägen:
SELECT 'myschema.mytbl'::regclass::oid;
I Postgres 9.4 eller senare kan du också använda to_regclass('myschema.mytbl')
, som inte ger upphov till ett undantag om tabellen inte hittas:
- Hur man kontrollerar om en tabell finns i ett givet schema
Sedan behöver du bara fråga katalogtabellen pg_attribute
för existensen av kolumnen:
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)