PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para traduzir o OID do PostgreSQL usando python


Você pode converter o "OID" para texto simplesmente transmitindo - desde o OID (Identificador de Objeto) é na verdade um regtype (o subtipo OID para tipos registrados) como você obteria da função pg_typeof() .

O Postgres normalmente exibirá valores do tipo de dados regtype como texto ao usuário. Exemplo:
SELECT pg_typeof('2013-1-1'::date);
 pg_typeof
-----------
 date

Enquanto internamente é um OID:
SELECT pg_typeof('2013-1-1'::date)::oid;
 pg_typeof
-----------
      1082

Se o seu cliente não fizer o mesmo, você pode forçá-lo com um cast explícito:
SELECT pg_typeof('2013-1-1'::date)::text;
SELECT 1082::regtype::text;

Obter tipos de todas as colunas do catálogo do sistema


Não está claro como você realmente recupera os tipos. Considere esta consulta para obter informações completas:
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

Observe que format_type(..) exibe o tipo incluindo modificadores.