PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment traduire l'OID PostgreSQL en utilisant python

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.