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

Come posso tradurre PostgreSQL OID usando python

Puoi convertire "OID" in text semplicemente trasmettendo - fornito l'OID (Object Identifier) è in realtà un regtype (il sottotipo OID per i tipi registrati) come si otterrebbe dalla funzione pg_typeof() .

Postgres normalmente visualizzerà valori del tipo di dati regtype come text all'utente. Esempio:

SELECT pg_typeof('2013-1-1'::date);
 pg_typeof
-----------
 date

Mentre internamente è un OID:

SELECT pg_typeof('2013-1-1'::date)::oid;
 pg_typeof
-----------
      1082

Se il tuo cliente non fa lo stesso puoi forzarlo con un cast esplicito:

SELECT pg_typeof('2013-1-1'::date)::text;
SELECT 1082::regtype::text;

Ottieni i tipi di tutte le colonne dal catalogo di sistema

Non è chiaro come in realtà recuperi i tipi. Considera questa query per ottenere informazioni complete:

SELECT attname
     , atttypid::regtype AS base_type
     , format_type(atttypid, atttypmod) AS full_type
FROM   pg_catalog.pg_attribute
WHERE  attrelid = 'public.tbl'::regclass  -- your table name here
AND    attnum > 0
AND    NOT attisdropped
ORDER  BY attnum;

  attname   |          base_type          |         full_type
------------+-----------------------------+-----------------------------
 age_id     | integer                     | integer
 age        | text                        | text
 ageabk     | character                   | character(2)
 foo        | boolean                     | boolean
 log_up     | timestamp without time zone | timestamp without time zone

Tieni presente che format_type(..) visualizza il tipo compresi i modificatori.