Запросить детали схемы таблицы в PostgreSQL? - PullRequest
7 голосов
/ 02 декабря 2010

Мне нужно знать тип столбца в PostgreSQL (т.е. varchar(20)).Я знаю, что, вероятно, смогу найти это, используя \d что-то в psql, но мне нужно, чтобы это было сделано с помощью запроса select.
Возможно ли это в PostgreSQL?

Ответы [ 3 ]

11 голосов
/ 26 октября 2011

В PostgreSQL есть намного более простой способ получить тип столбца.

SELECT pg_typeof(col)::text FROM tbl LIMIT 1

Конечно, таблица должна содержать хотя бы одну строку. И вы получите только базовый тип без модификаторов типов (если есть). Используйте альтернативу ниже, если вам это тоже нужно.
Вы можете использовать эту функцию и для констант. Инструкция по pg_typeof().

Для пустой (или любой) таблицы вы можете использовать запрос системного каталога pg_attribute, чтобы получить полный список столбцов и их соответствующий тип в следующем порядке:

SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytbl'::regclass   -- optionally schema-qualified
AND    NOT attisdropped
AND    attnum > 0
ORDER  BY attnum;

Руководство по format_type() и типам идентификаторов объектов подобно regclass.

9 голосов
/ 02 декабря 2010

Вы можете полностью описать таблицу, используя postgres, со следующим запросом:

SELECT
  a.attname as Column,
  pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype
  FROM
  pg_catalog.pg_attribute a
  WHERE
    a.attnum > 0
  AND NOT a.attisdropped
  AND a.attrelid = (
    SELECT c.oid
    FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
    WHERE c.relname ~ '^(TABLENAME)$'
   AND pg_catalog.pg_table_is_visible(c.oid)
  )

Таким образом вы получите имена столбцов и тип данных.

Также можно запустить клиент PSQLиспользуя параметр -E

$ psql -E

А затем простой \d mytable выведет запросы, используемые postgres для описания таблицы.Это работает для каждой команды psql description.

2 голосов
/ 02 декабря 2010

Да, посмотрите на информационную схему .

...