Mostrare il risultato della query tipi di colonna (PostgreSQL)

C’è un modo per ottenere facilmente i tipi di colonna del risultato di una query? Ho letto il psql documentazione, ma non credo che lo supporta. Idealmente, mi piacerebbe essere in grado di ottenere qualcosa di simile:

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

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

  • Ah, ho appena fatto questa domanda ieri a #postgresql (nessuna risposta)
  • Non credo che il psql può mostrare direttamente. Ma dovrebbe essere abbastanza facile da modificare per farlo. Forse si potrebbe scrivere una stored procedure per emulare questo, però.
  • PostgreSQL 11 introdotte gdesc Meglio tardi che mai 🙂
InformationsquelleAutor Justin K | 2010-07-16

 

3 Replies
  1. 4

    Non credo che si può stampare esattamente quello che hai nel campione, a meno di non scrivere una stored procedure per farlo.

    Un modo per farlo (due “seleziona”):

    1. create table my_table as select ...
    2. \d my_table
    3. select * from my_table
    • Sì, ho solo bisogno di tipi, non necessariamente quel formato. Grazie.
    • Questo sembra piuttosto difettose e scomodo rispetto all’utilizzo di pg_typeof().
    • Sono d’accordo. La vita è un viaggio. 🙂
  2. 45

    È possibile ottenere qualsiasi query SELECT risultato tipo di colonna.

    Esempio

    Data la seguente query e il risultato, rispondiamo alla domanda”che Cos’è il tipo di colonna 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 archivi della mailing list ho trovato riferimento a un nativo pg funzione chiamata pg_typeof.

    Esempio di utilizzo:

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

    Di uscita:

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

    Evviva!

  3. 0

    È sicuramente possibile con \gdesc comando(PostgreSQL 11):

    \gdesc

    Mostra la descrizione (che è, i nomi di colonna e i tipi di dati del risultato della query corrente del buffer. La query non viene effettivamente
    eseguiti;
    tuttavia, se contiene qualche tipo di errore di sintassi, che
    errore verrà segnalato in modo normale.

    Se la query corrente del buffer è vuoto, più recentemente inviato query è descritto invece.

    Per esempio:

    $ SELECT * FROM pg_database \gdesc
    
        COLUMN     |   TYPE    
    ---------------+-----------
     datname       | name
     datdba        | oid
     encoding      | INTEGER
     datcollate    | name
     datctype      | name
     datistemplate | BOOLEAN
     datallowconn  | BOOLEAN
     datconnlimit  | INTEGER
     datlastsysoid | oid
     datfrozenxid  | xid
     datminmxid    | xid
     dattablespace | oid
     datacl        | aclitem[]

Lascia un commento