web-dev-qa-db-ja.com

クエリ結果の列タイプを表示する(PostgreSQL)

クエリ結果の列タイプを簡単に取得する方法はありますか?私はpsqlのドキュメントを読みましたが、それがそれをサポートしているとは思いません。理想的には、私は次のようなものを得ることができるでしょう:

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

何かをコーディングせずにこの情報を取得する方法はありますか?

34
Justin K

ストアドプロシージャを記述しない限り、サンプルの内容を正確に印刷できるとは思いません。

それを行う1つの方法(2つの「選択」):

  1. create table my_table as select ...
  2. \d my_table
  3. select * from my_table
6
Konrad Garus

SELECTクエリの結果の列タイプを取得することが可能です。

次のクエリと結果を前提として、*「all_idsの列タイプは何ですか?」*の質問に答えましょう。

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

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

「all_ids」のタイプを明らかにするメカニズムが必要です。

postgresメーリングリストアーカイブというネイティブpg関数への参照を見つけましたpg_typeof

使用例:

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

出力:

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

乾杯!

47
Jay Taylor

\gdescコマンドで確実に可能です(PostgreSQL 11):

\ gdesc

現在のクエリバッファの結果の説明(つまり、列名とデータ型)を表示します。クエリは実際には実行されません。ただし、クエリになんらかの構文エラーが含まれている場合、そのエラーは通常の方法で報告されます。

現在のクエリバッファが空の場合、最後に送信されたクエリが代わりに記述されます。

例えば:

$ 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[]
5
Lukasz Szozda