Vous pouvez convertir le "OID" en text
en diffusant simplement - à condition que l'OID (Object Identifier)
est en fait un regtype
(le sous-type OID pour les types enregistrés) comme vous obtiendriez de la fonction pg_typeof()
.
Postgres affichera normalement les valeurs du type de données regtype
comme text
à l'utilisateur. Exemple :
SELECT pg_typeof('2013-1-1'::date);
pg_typeof
-----------
date
Alors qu'en interne c'est un OID :
SELECT pg_typeof('2013-1-1'::date)::oid;
pg_typeof
-----------
1082
Si votre client ne fait pas la même chose, vous pouvez le forcer avec un cast explicite :
SELECT pg_typeof('2013-1-1'::date)::text;
SELECT 1082::regtype::text;
Obtenir les types de toutes les colonnes du catalogue système
On ne sait pas comment vous récupérez réellement les types. Considérez cette requête pour obtenir des informations complètes :
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
Notez que format_type(..)
affiche le type y compris les modificateurs.