sql >> Databasteknik >  >> RDS >> PostgreSQL

Översätter fråga från Firebird till PostgreSQL

Postgres har ett annat sätt att lagra information om systeminnehåll. Detta kallas Systemkataloger .

I Firebird returnerar din fråga i princip en rad för varje kolumn i en tabell i varje schema med ytterligare en heltalskolumn som mappas till en fältdatatyp.

I Postgres med hjälp av systemtabeller i pg_catalog schema något liknande kan uppnås med denna fråga:

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

Ovanstående fråga returnerar också systemkataloger. Om du vill utesluta dem behöver du lägga till ytterligare JOIN till pg_namespace och en where-sats med pg_namespace.nspname <> 'pg_catalog' , eftersom detta är schemat där systemkataloger lagras.

Om du också vill se datatypnamn istället för deras representativa nummer lägg till en JOIN till pg_type .

Informationsschema består av insamling av synpunkter. I de flesta fall behöver du inte hela SQL-frågan som står bakom vyn, så att använda systemtabeller ger dig bättre prestanda. Du kan dock granska definitionen av vyer, bara för att komma igång med tabellerna och villkoren som används för att skapa en utdata.



  1. En introduktion till fulltextsökning i MariaDB

  2. ALTER TABLE-tabell AUTO_INCREMENT =$x

  3. FEL:array får inte innehålla nulls PostgreSQL

  4. Förstå de 3 nyckelegenskaperna hos Big Data