クエリ結果の列タイプを簡単に取得する方法はありますか?私はpsqlのドキュメントを読みましたが、それがそれをサポートしているとは思いません。理想的には、私は次のようなものを得ることができるでしょう:
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
何かをコーディングせずにこの情報を取得する方法はありますか?
ストアドプロシージャを記述しない限り、サンプルの内容を正確に印刷できるとは思いません。
それを行う1つの方法(2つの「選択」):
create table my_table as select ...
\d my_table
select * from my_table
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)
乾杯!
\gdesc
コマンドで確実に可能です(PostgreSQL 11):
現在のクエリバッファの結果の説明(つまり、列名とデータ型)を表示します。クエリは実際には実行されません。ただし、クエリになんらかの構文エラーが含まれている場合、そのエラーは通常の方法で報告されます。
現在のクエリバッファが空の場合、最後に送信されたクエリが代わりに記述されます。
例えば:
$ 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[]