2010-12-02 34 views

Respuesta

6

Puede describir completamente una tabla usando postgres con la siguiente consulta:

SELECT 
    a.attname as Column, 
    pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype 
    FROM 
    pg_catalog.pg_attribute a 
    WHERE 
    a.attnum > 0 
    AND NOT a.attisdropped 
    AND a.attrelid = (
    SELECT c.oid 
    FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
    WHERE c.relname ~ '^(TABLENAME)$' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
) 

Tith esto se va a recuperar nombres de columna y tipo de datos.

También es posible iniciar el cliente psql usando la opción -E

$ psql -E 

Y entonces un simple salida \d mytable voluntad las consultas utilizadas por postgres para describir la tabla. Funciona para cada psql describe los comandos.

+0

¡Excelente respuesta! Me encontré con otro problema, sin embargo: http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in-postgresql – David

+2

No creo que necesites esa coincidencia de expresiones regulares, ' c.relname ~ '^ (TABLENAME) $' 'es equivalente a' c.relname = 'TABLENAME''. Buena respuesta. –

+0

@mu Tienes razón, pero creo que copió esto de algo con soporte de expresiones regulares :) –

10

Hay una forma mucho más simple en PostgreSQL para obtener el tipo de una columna.

SELECT pg_typeof(col)::text FROM tbl LIMIT 1 

La tabla debe contener al menos una fila, por supuesto. Y solo obtiene el tipo de base sin modificadores de tipo (si corresponde). Usa la alternativa a continuación si la necesitas también.
También puede usar la función para constantes. El manual on pg_typeof().

Para una tabla que puede utilizar consultar el catálogo del sistema pg_attribute para obtener la lista completa de las columnas y sus respectivas tipo con el fin vacía (o cualquier otro):

SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type 
FROM pg_attribute 
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified 
AND NOT attisdropped 
AND attnum > 0 
ORDER BY attnum; 

El manual sobre format_type() y en object identifier types como regclass .

+0

Buscando "format_type (atttypid, atttypmod)" por un tiempo, ya que parece que es lo mismo que information_schema.columns. udt_name (o similar y eso está perfectamente bien para mi caso). Gracias :). – Dolfa

Cuestiones relacionadas