PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Bestimmung der OID einer Tabelle in Postgres 9.1?

Um eine Tabellen-OID zu erhalten, wandeln Sie sie in den Objektidentifizierertyp regclass um (bei Verbindung mit derselben DB):

SELECT 'mytbl'::regclass::oid;

Dies findet die erste Tabelle (oder Ansicht usw.) mit dem angegebenen Namen entlang des search_path oder löst eine Ausnahme aus, wenn sie nicht gefunden wird.

Schemaqualifizieren Sie den Tabellennamen, um die Abhängigkeit vom Suchpfad zu entfernen:

SELECT 'myschema.mytbl'::regclass::oid;

In Postgres 9.4 oder später können Sie auch to_regclass('myschema.mytbl') verwenden , die keine Ausnahme auslöst, wenn die Tabelle nicht gefunden wird:

  • Überprüfen, ob eine Tabelle in einem bestimmten Schema existiert

Dann brauchen Sie nur noch die Katalogtabelle pg_attribute abzufragen für die Existenz der Spalte:

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)