Показать типы столбцов результатов запроса (PostgreSQL) - PullRequest
30 голосов
/ 16 июля 2010

Есть ли способ легко получить типы столбцов результата запроса?Я прочитал документацию PSQL, но я не думаю, что это поддерживает.В идеале я мог бы получить что-то вроде:

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

Есть ли способ получить эту информацию, не кодируя что-то?

Ответы [ 3 ]

46 голосов
/ 13 июня 2013

Можно получить любой тип столбца результата запроса SELECT.

* ** 1003 тысяча два * Пример

Учитывая следующий запрос и результат, давайте ответим на вопрос * "Каков тип столбца 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)

Ура!

5 голосов
/ 19 июля 2010

Я не думаю, что вы можете напечатать именно то, что есть в образце, если только вы не напишите для него хранимую процедуру.

Один из способов сделать это (два «выбора»):

  1. create table my_table as select ...
  2. \d my_table
  3. select * from my_table
1 голос
/ 29 декабря 2018

Это определенно возможно с помощью команды \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[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...