Мне нужно знать тип столбца в PostgreSQL (т.е. varchar(20)
). Я знаю, что, вероятно, мог бы найти это, используя \d
что-то в psql, но мне нужно, чтобы это было сделано с помощью запроса на выборку.
Возможно ли это в PostgreSQL?
Запросить сведения о схеме таблицы в PostgreSQL?
Ответы (3)
Вы можете полностью описать таблицу с помощью 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.
c.relname ~ '^(TABLENAME)$'
эквивалентно c.relname = 'TABLENAME'
. Хороший ответ, хотя.
- person mu is too short; 02.12.2010
В 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
.