2010-07-16 19 views
24

¿Hay alguna forma de obtener fácilmente los tipos de columna de un resultado de consulta? Leí la documentación de psql, pero no creo que sea compatible. Idealmente, me gustaría ser capaz de conseguir algo como:Mostrar los tipos de columna de resultados de consulta (PostgreSQL)

columna : text | columnb : integer 
----------------+------------------- 
oh hai   |    42 

¿Hay alguna manera de obtener esta información sin necesidad de codificar algo?

+0

Ha, acabo de hacer esta pregunta ayer en #postgresql (no hay respuesta) –

+0

No creo que 'psql' pueda mostrárselo directamente. Pero debería ser bastante fácil modificarlo para hacerlo. Quizás puedas escribir un procedimiento almacenado para emular esto sin embargo. – Wolph

Respuesta

3

No creo que pueda imprimir exactamente lo que tiene en la muestra, a menos que escriba un procedimiento almacenado para la misma.

Una forma de hacerlo (dos "selecciona"):

  1. create table my_table as select ...
  2. \d my_table
  3. select * from my_table
+0

Sí, solo necesitaba los tipos, no necesariamente ese formato. Gracias. –

+4

Esto parece bastante complicado e inconveniente en comparación con el uso de 'pg_typeof()'. –

+3

@JayTaylor Estoy de acuerdo. La vida es un viaje. :-) –

37

Es posible conseguir cualquier resultado de la consulta SELECT tipo de columna.

Ejemplo

Dada la siguiente consulta y el resultado, vamos a responder a la pregunta * "¿Cuál es el tipo de columna de all_ids?" *

SELECT array_agg(distinct "id") "all_ids" FROM "auth_user"; 

       all_ids 
-------------------------------------------- 
{30,461577687337538580,471090357619135524} 
(1 row) 

Necesitamos un mecanismo para dar a conocer el tipo de "all_ids".

En el postgres mailing list archives encontré una referencia a una función pg nativa llamada pg_typeof. el uso

Ejemplo:

SELECT pg_typeof(array_agg(distinct "id")) "all_ids" FROM "auth_user"; 

de salida:

all_ids 
---------- 
bigint[] 
(1 row) 

Salud!

Cuestiones relacionadas