PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Traduzione di query da Firebird a PostgreSQL

Postgres ha un altro modo per memorizzare le informazioni sul contenuto del sistema. Questo è chiamato Cataloghi di sistema .

In Firebird la tua query restituisce sostanzialmente una riga per ogni colonna di una tabella in ogni schema con una colonna Intero aggiuntiva che viene mappata a un tipo di dati di campo.

In Postgres usando le tabelle di sistema in pg_catalog schema qualcosa di simile può essere ottenuto utilizzando questa query:

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

La query precedente restituisce anche i cataloghi di sistema. Se desideri escludere loro devi aggiungere un altro JOIN a pg_namespace e una clausola where con pg_namespace.nspname <> 'pg_catalog' , perché questo è lo schema in cui sono archiviati i cataloghi di sistema.

Se desideri vedere anche i nomi dei tipi di dati invece dei loro numeri rappresentativi, aggiungi un JOIN a pg_type .

Schema di informazioni consiste in una raccolta di opinioni. Nella maggior parte dei casi non è necessaria l'intera query SQL che sta dietro la vista, quindi l'utilizzo delle tabelle di sistema ti darà prestazioni migliori. Tuttavia, puoi esaminare la definizione delle viste, solo per iniziare con le tabelle e le condizioni utilizzate per formare un output.