Kann jemand die OID einer Tabelle in Postgres 9.1 finden? Ich schreibe ein Update-Skript, das auf das Vorhandensein einer Spalte in einer Tabelle testen muss, bevor es versucht, die Spalte zu erstellen. Dadurch wird verhindert, dass das Skript nach dem ersten Fehler ausgeführt wird.Ermitteln der OID einer Tabelle in Postgres 9.1?
Antwort
Die Postgres-Katalogtabelle pg_class
ist, was Sie betrachten sollten. Es sollte eine Zeile pro Tabelle mit dem Tabellennamen in der Spalte relname
und der OID in der ausgeblendeten Spalte oid
geben.
Die Katalogtabellen befinden sich in der Datenbank postgres
. Stellen Sie also sicher, dass Sie eine Verbindung zu dieser Datenbank und nicht zu Ihrer Anwendungsdatenbank herstellen.
Sie könnten auch interessiert sein an der pg_attribute
Katalogtabelle, die eine Zeile pro Tabelle Spalte enthält.
Siehe auch: http://www.postgresql.org/docs/current/static/catalog-pg-class.html und http://www.postgresql.org/docs/current/static/catalog-pg-attribute.html
Es gibt eine einfache Möglichkeit, eine Tabelle OID zu erhalten. Gieße den object-identifier classregclass
(während die mit den jeweiligen DB):
SELECT 'mytbl'::regclass::oid;
Voreingestellt ist das erste Schema im search_path
oder wirft eine Ausnahme, wenn nicht gefunden.
Oder Schema qualifizieren explizit:
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = '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)
In Postgres 9.4 oder später können Sie auch to_regclass('mytbl')
:
SELECT 'myschema.mytbl'::regclass::oid;
Dann nur Sie Katalogtabelle pg_attribute
für die Existenz der Säule inspizieren müssen , die keine Ausnahme auslöst, wenn die Tabelle nicht gefunden wird:
einfach die Möglichkeiten vervollständigen Ich mag möchte hinzufügen, dass es für Löschen von Spalten, um ohne Fehler aus einer Syntax vorhanden:
ALTER TABLE mytbl DROP COLUMN IF EXISTS mycol
Siehe http://www.postgresql.org/docs/9.0/static/sql-altertable.html
Dann können Sie Ihre Spalte sicher hinzufügen.
SELECT oid FROM pg_class WHERE relname = 'tbl_name' AND relkind = 'r';
Erklärung wäre nett ... – eirikir
- 1. Log Feuern von Triggern in Postgres 9.1
- 2. Wie Binärdaten in Postgres oid Spalte
- 3. Postgres 9.1 Art des SETOF Datensatzes
- 4. Postgres: Ermitteln einer Gesamtzahl von verwandten basierend auf einer Bedingung aus einer verwandten Tabelle
- 5. SQL: aus verschachtelter Tabelle wählt oid
- 6. Postgres: Tabelle in der Datenbank erstellen
- 7. Tabelle Join Reihenfolge in Postgres
- 8. aktualisieren Datumsbereich in Postgres Tabelle
- 9. Wie schätzen Sie die Größe einer Spalte in einer Postgres-Tabelle ein?
- 10. Postgres - Wie entkam Daten aus der Tabelle
- 11. ALTER TABLE, setzen null in nicht null Spalte, PostgreSQL 9.1
- 12. kann nicht finden adminpack.sql in postgresql 9.1
- 13. Abfrage numerischer OID in PySNMP?
- 14. eine neue Spalte in einer Postgres Partition Master Tabelle
- 15. für jede Gruppe beliebige Zeilen auswählen in einer Postgres-Tabelle
- 16. Wie kann ich alle Indizes einer Tabelle in Postgres löschen?
- 17. Ausgabe der Abfrage in eine andere Tabelle in Postgres einfügen?
- 18. Tabellensperre auf SET TABLESPACE in PostgreSQL 9.1?
- 19. Abfragen Postgres SQL JSON Tabelle
- 20. Ermitteln Sie die Rangfolge von Gruppen in einer selbstreferenzierenden Tabelle
- 21. Perl: SNMP - Wildcard OID
- 22. SNMP: Benutzerdefinierte OID erstellen
- 23. Ermitteln der Feldlänge einer Spalte in einer Datentabelle
- 24. Wie verwendet man Geometry-Datentyp zur Postgres-Tabelle?
- 25. Telefonnummer Format in Peoplesoft 9.1
- 26. Postgres mathematischer Ausdruck für jede Zeile in der Tabelle calculcated
- 27. Ermitteln der Kurshistorie einer Aktie
- 28. Ermitteln der ListboxItem-Position in einer Zeichenfläche?
- 29. Ermitteln der Bittiefe in einer MP3-Datei
- 30. Ermitteln der Zeichenfolgenlänge einer Ganzzahl in .NET
Ich hatte die Dokumentation auf der 'pg_class' und' pg_attribute' Tabellen gesehen, aber ich wusste nicht, dass es eine versteckte Spalte war namens 'oid' im' pg_class' Tabelle. Ich konnte nicht herausfinden, wo der Oid von den Docs war. Vielen Dank! –
Das ist nicht ganz genau. Jede Datenbank hat ein Schema mit dem Namen 'pg_catalog', das für die Datenbank spezifische Katalogtabellen enthält. –
Ich zweite @ TonyVitabile. Es war die versteckte Spalte "oid", die ich suchte. –