2010-07-16 11 views
24

C'è un modo per ottenere facilmente i tipi di colonna di un risultato di una query? Ho letto la documentazione di psql, ma non credo che lo supporti. Idealmente, sarei in grado di ottenere qualcosa di simile:Mostra i tipi di colonne del risultato della query (PostgreSQL)

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

C'è un modo per ottenere queste informazioni senza codifica qualcosa?

+0

Ha, ho appena fatto questa domanda ieri in #postgresql (nessuna risposta quindi) –

+0

Non penso che 'psql' possa mostrarlo direttamente a voi. Ma dovrebbe essere abbastanza facile modificarlo per farlo. Forse potresti scrivere una stored procedure per emulare questo però. – Wolph

risposta

3

Non penso che si possa stampare esattamente ciò che si ha nel campione, a meno che non si scriva una procedura memorizzata per esso.

Un modo per farlo (due "seleziona"):

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

Sì, avevo solo bisogno dei tipi, non necessariamente di quel formato. Grazie. –

+4

Questo sembra piuttosto disordinato e scomodo rispetto all'uso di 'pg_typeof()'. –

+3

@JayTaylor Sono d'accordo. La vita è un viaggio. :-) –

37

E 'possibile ottenere qualsiasi risultato di una query tipo di colonna SELECT.

Esempio

Data la seguente query e il risultato, cerchiamo di rispondere alla domanda * "Qual è il tipo di colonna di all_ids?" *

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

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

Abbiamo bisogno di un meccanismo per svelare il tipo di "all_ids".

Sul postgres mailing list archives ho trovato riferimento a una funzione pg nativa denominata pg_typeof. utilizzo

Esempio:

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

uscita:

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

Cheers!

Problemi correlati