Перейти к содержимому

Как узнать тип данных в postgresql

  • автор:

Как узнать тип данных в postgresql

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

Числовые типы данных

  • serial : представляет автоинкрементирующееся числовое значение, которое занимает 4 байта и может хранить числа от 1 до 2147483647. Значение данного типа образуется путем автоинкремента значения предыдущей строки. Поэтому, как правило, данный тип используется для определения идентификаторов строки.
  • smallserial : представляет автоинкрементирующееся числовое значение, которое занимает 2 байта и может хранить числа от 1 до 32767. Аналог типа serial для небольших чисел.
  • bigserial : представляет автоинкрементирующееся числовое значение, которое занимает 8 байт и может хранить числа от 1 до 9223372036854775807. Аналог типа serial для больших чисел.
  • smallint : хранит числа от -32768 до +32767. Занимает 2 байта. Имеет псевдоним int2 .
  • integer : хранит числа от -2147483648 до +2147483647. Занимает 4 байта. Имеет псевдонимы int и int4 .
  • bigint : хранит числа от -9223372036854775808 до +9223372036854775807. Занимает 8 байт. Имеет псевдоним int8 .
  • numeric : хранит числа с фиксированной точностью, которые могут иметь до 131072 знаков в целой части и до 16383 знаков после запятой. Данный тип может принимать два параметра precision и scale: numeric(precision, scale) . Параметр precision указывает на максимальное количество цифр, которые может хранить число. Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0. Например, для числа 23.5141 precision равно 6, а scale — 4.
  • decimal : хранит числа с фиксированной точностью, которые могут иметь до 131072 знаков в целой части и до 16383 знаков в дробной части. То же самое, что и numeric .
  • real : хранит числа с плавающей точкой из диапазона от 1E-37 до 1E+37. Занимает 4 байта. Имеет псевдоним float4 .
  • double precision : хранит числа с плавающей точкой из диапазона от 1E-307 до 1E+308. Занимает 8 байт. Имеет псевдоним float8 .
Id SERIAL, TotalWeight NUMERIC(9,2), Age INTEGER, Surplus REAL

Типы для работы с валютой (денежными единицами)

Для работы с денежными единицами определен тип money , который может принимать значения в диапазоне от -92233720368547758.08 до +92233720368547758.07 и занимает 8 байт.

Символьные типы

  • character(n) : представляет строку из фиксированного количества символов. С помощью параметра задается задается количество символов в строке. Имеет псевдоним char(n) .
  • character varying(n) : представляет строку из переменной длины. С помощью параметра задается задается максимальное количество символов в строке. Имеет псевдоним varchar(n) .
  • text : представляет текст произвольной длины.

Бинарные данные

Для хранения бинарных данных определен тип bytea . Он хранит данные в виде бинарных строк, которые представляют последовательность октетов или байт.

Типы для работы с датами и временем

  • timestamp : хранит дату и время. Занимает 8 байт. Для дат самое нижнее значение — 4713 г до н.э., самое верхнее значение — 294276 г н.э.
  • timestamp with time zone : то же самое, что и timestamp , только добавляет данные о часовом поясе.
  • date : представляет дату от 4713 г. до н.э. до 5874897 г н.э. Занимает 4 байта.
  • time : хранит время с точностью до 1 микросекунды без указания часового пояса. Принимает значения от 00:00:00 до 24:00:00. Занимает 8 байт.
  • time with time zone : хранит время с точностью до 1 микросекунды с указанием часового пояса. Принимает значения от 00:00:00+1459 до 24:00:00-1459. Занимает 12 байт.
  • interval : представляет временной интервал. Занимает 16 байт.

Распространенные форматы дат:

  • yyyy-mm-dd — 1999-01-08
  • Month dd, yyyy — January 8, 1999
  • mm/dd/yyyy — 1/8/1999

Распространенные форматы времени:

  • hh:mi — 13:21
  • hh:mi am/pm — 1:21 pm
  • hh:mi:ss — 1:21:34

Логический тип

Тип boolean может хранить одно из двух значений: true или false.

Вместо true можно указывать следующие значения: TRUE, ‘t’, ‘true’, ‘y’, ‘yes’, ‘on’, ‘1’.

Вместо false можно указывать следующие значения: FALSE, ‘f’, ‘false’, ‘n’, ‘no’, ‘off’, ‘0’.

Типы для представления интернет-адресов

  • cidr : интернет-адрес в формате IPv4 и IPv6. Например, 192.168.0.1 . Занимает от 7 до 19 байт.
  • inet : интернет-адрес в формате cidr/y , где cidr это адрес в формате IPv4 или IPv6, а /y — количество бит в адресе (если этот параметр не указан, то используется 34 для IPv4, 128 для IPv6). Например, 192.168.0.1/24 или 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 . Занимает от 7 до 19 байт.
  • macaddr : хранит MAC-адрес. Занимает 6 байт.
  • macaddr8 : хранит MAC-адрес в формате EUI-64. Занимает 8 байт.

Геометрические типы

  • point : представляет точку на плоскости в формате (x,y) . Занимает 16 байт.
  • line : представляет линию неопределенной длины в формате . Занимает 32 байта.
  • lseg : представляет отрезок в формате ((x1,y1),(x2,y2)) . Занимает 32 байта.
  • box : представляет прямоугольник в формате ((x1,y1),(x2,y2)) . Занимает 32 байта.
  • path : представляет набор содиненных точек. В формате ((x1,y1). ) путь является закрытым (первая и последняя точка соединяются линией) и фактически представляет многоугольник. В формате [(x1,y1). ] путь является открытым Занимает 16+16n байт.
  • polygon : представляет многоугольник в формате ((x1,y1). ) . Занимает 40+16n байт.
  • circle : представляет окружность в формате . Занимает 24 байта.

Остальные типы данных

  • json : хранит данные json в текстовом виде.
  • jsonb : хранит данные json в бинарном формате.
  • uuid : хранит универсальный уникальный идентификатор (UUID), например, a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 . Занимает 32 байта.
  • xml : хранит даные в формате XML.

Получить названия типов данных у таблицы в Postgresql на python

из которой можно получить только OID типа данных колонки. Собственно вопрос: Как получить именно название типа (integer, varchar итд)? Может есть какая-то функция, которая возвращает название по OID? В документации смотрел, но ничего такого не нашел.

Отслеживать
задан 29 мая 2016 в 13:21
Артем Межеловский Артем Межеловский
153 1 1 серебряный знак 5 5 бронзовых знаков

Мне вспоминается только \d [имя_таблицы] . Была ещё какая-то конструкция с SHOW CREATE TABLE но в MySQL (см. serverfault.com/questions/231952/…).

29 мая 2016 в 13:38
@DimXenon это фишка psql, из адаптера для работы с БД это вряд ли сработает.
– user181100
29 мая 2016 в 13:48
По теме: поищите таблицу pg_types . Скорее всего, ваш ответ там.
– user181100
29 мая 2016 в 13:48

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

import psycopg2 if __name__ == '__main__': DSN = 'host=HOST port=PORT dbname=DBNAME user=USER password=PASS' with psycopg2.connect(DSN) as connection: with connection.cursor() as cursor: cursor.execute("SELECT * FROM TABLE_NAME LIMIT 0") for i in cursor.description: cursor.execute("SELECT typname FROM pg_type WHERE oid=".format(oid=i[1])) print("Column name: ", i[0], " Column type: ", cursor.fetchone()[0]) 

Как было указано в комментариях выше, искать надо в таблице pg_type. pg_type — служебная таблица в схеме pg_catalog. https://www.postgresql.org/docs/current/static/catalogs.html В ней хранятся информация обо всех типах данных. Эта таблица может быть полезна, если нужно создать свой собственный тип данных в psycopg2. Подробности: http://initd.org/psycopg/docs/advanced.html#type-casting-of-sql-types-into-python-objects

Также название типа данных можно получить по-другому (опущу мешанину соединений и курсоров):

SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = TABLE_NAME 

Читабельное название типа находится в колонке data_type. https://www.postgresql.org/docs/9.1/static/infoschema-columns.html У второго решения есть плюс: тип данных хранится как varchar, тогда как в pg_type тип данных — name. Цитата из документации:

The name type exists only for the storage of identifiers in the internal system catalogs and is not intended for use by the general user.

Как посмотреть структуру таблицы sql

Можно посмотреть колонки таблицы и тип данных через, например, pgAdmin .

Также через psql можно выполнить запрос вида:

SELECT column_name, column_default, data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'super_table'; 

Этот запрос вернёт название колонки, её значение по умолчанию, а также тип данных.

Как узнать тип данных в столбце sql

Приведу запрос с помощью которого можно имена полей и тип данных в таблице products:

SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = products 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *