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

Abfrage von Firebird nach PostgreSQL übersetzen

Postgres hat eine andere Möglichkeit, Informationen über Systeminhalte zu speichern. Dies wird Systemkataloge genannt .

In Firebird gibt Ihre Abfrage grundsätzlich eine Zeile für jede Spalte einer Tabelle in jedem Schema mit einer zusätzlichen Integer-Spalte zurück, die einem Felddatentyp zugeordnet ist.

In Postgres mit Systemtabellen in pg_catalog schema etwas Ähnliches kann mit dieser Abfrage erreicht werden:

SELECT 
  TRIM(c.relname) AS table_name, TRIM(a.attname) AS column_name, a.atttypid AS field_type
FROM pg_class c
LEFT JOIN pg_attribute a ON 
  c.oid = a.attrelid
  AND a.attnum > 0 -- only ordinary columns, without system ones
WHERE c.relkind = 'r' -- only tables
ORDER BY 1,2

Die obige Abfrage gibt auch Systemkataloge zurück. Wenn Sie ausschließen möchten ihnen müssen Sie einen weiteren JOIN zu pg_namespace hinzufügen und eine where-Klausel mit pg_namespace.nspname <> 'pg_catalog' , da dies das Schema ist, in dem Systemkataloge gespeichert werden.

Wenn Sie auch Datentypnamen anstelle ihrer repräsentativen Nummern sehen möchten, fügen Sie einen JOIN zu pg_type hinzu .

Informationsschema besteht aus einer Sammlung von Ansichten. In den meisten Fällen benötigen Sie nicht die gesamte SQL-Abfrage, die hinter der Ansicht steht, sodass die Verwendung von Systemtabellen zu einer besseren Leistung führt. Sie können jedoch die Definition von Ansichten überprüfen, nur um mit den Tabellen und Bedingungen zu beginnen, die zum Erstellen einer Ausgabe verwendet werden.