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.