クエリ結果の列の種類を簡単に取得する方法はありますか? psql のドキュメントを読みましたが、それがサポートされているとは思いません。理想的には、次のようなものを取得できます。
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
何かをコーディングせずにこの情報を取得する方法はありますか?
クエリ結果の列の種類を簡単に取得する方法はありますか? psql のドキュメントを読みましたが、それがサポートされているとは思いません。理想的には、次のようなものを取得できます。
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
何かをコーディングせずにこの情報を取得する方法はありますか?
任意の 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
コマンド(psql 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[]
ストアド プロシージャを作成しない限り、サンプルにあるものを正確に印刷できるとは思いません。
それを行う1つの方法(2つの「選択」):
create table my_table as select ...
\d my_table
select * from my_table