Все распространённые типы данных колонок PostgreSQL, сгруппированные по семействам: целые числа, десятичные дроби, текст, время, логические значения и UUID, JSON, сетевые адреса, составные типы и типы расширений. Каждая строка показывает, что хранит тип и когда его выбрать.
В PostgreSQL десятки типов, но повседневное проектирование схем обходится базовым набором. Повторяющиеся выборы: integer против numeric для чисел, varchar против text для строк (text обычно достаточно), timestamp против timestamptz (предпочитайте timestamptz для всего из реального мира) и json против jsonb (предпочитайте jsonb — он бинарный и индексируется). Выбирайте самый конкретный тип, который всё же подходит; база данных сама следит за его соблюдением.
Справочная таблица · 46 записи
Типы данных PostgreSQLExplained
46 of 46 rows
Целые числа
2-байтовое целое от -32768 до 32767.
Редко; только когда нужно сэкономить место.
4-байтовое целое, примерно плюс/минус 2 миллиарда.
Колонка по умолчанию для целых чисел.
8-байтовое целое, примерно плюс/минус 9 квинтиллионов.
Очень большие счётчики или внешние идентификаторы.
Автоинкрементное 4-байтовое целое.
Устаревшие автонумерованные ключи; с PG 10 рекомендуемая замена — GENERATED AS IDENTITY.
2- и 8-байтовые варианты serial.
Автонумерация под колонку smallint или bigint.
Целое число, которое таблица генерирует за вас (GENERATED ALWAYS AS IDENTITY).
Современный serial; стандарт SQL и защита от ручных вставок.
Десятичные и с плавающей точкой
Точные десятичные дроби с произвольной точностью.
Деньги и всё, где ошибки округления недопустимы.
4-байтовое число с плавающей точкой одинарной точности.
Приближённые научные значения, где точность не критична.
8-байтовое число с плавающей точкой двойной точности.
Геоданные, статистика и значения признаков ML.
Денежная сумма с фиксированной локалью.
Редко; numeric с кодом валюты на стороне приложения переносимее.
Текст
Текст фиксированной длины, дополняемый пробелами.
Коды известной ширины; редко нужно.
Текст переменной длины с необязательным пределом.
Ограниченные строки: имена пользователей, email.
Текст переменной длины без ограничения длины.
Универсальная строковая колонка; без штрафа к производительности против varchar.
Время
Календарная дата без времени суток.
Дни рождения и сроки.
Время суток, с часовым поясом или без.
Ежедневные будильники или часы работы.
Дата и время без часового пояса.
Устаревшие схемы; избегайте в новых проектах.
Дата и время, хранящиеся как UTC, показываются в зоне клиента.
Вариант по умолчанию для любого реального момента; предпочитайте его timestamp.