38

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

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

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

4

3 に答える 3

56

任意の 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)

乾杯!

于 2013-06-13T19:16:03.013 に答える
13

\gdescコマンド(psql 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[]
于 2018-12-28T21:50:52.847 に答える
7

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

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

  1. create table my_table as select ...
  2. \d my_table
  3. select * from my_table
于 2010-07-19T09:34:16.047 に答える