Skip to content

Типи даних PostgreSQL пояснені

Усі поширені типи колонок PostgreSQL, згруповані за родинами: цілі числа, десяткові, текст, час, булеві значення та UUID, JSON, мережеві адреси, складені типи і типи розширень. Кожен рядок показує, що зберігає тип і коли його обирати.

У PostgreSQL десятки типів, але щоденне проєктування схеми обходиться ключовим набором. Повторювані вибори: integer чи numeric для чисел, varchar чи text для рядків (зазвичай достатньо text), timestamp чи timestamptz (для всього реального світу обирайте timestamptz) та json чи jsonb (обирайте jsonb — він двійковий і підтримує індекси). Обирайте найконкретніший тип, який ще пасує; база даних контролюватиме це за вас.

Довідкова таблиця · 46 записи
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 із кодом валюти на стороні застосунку переносиміший.
Текст
Текст фіксованої довжини, доповнений пробілами.Коди відомої ширини; рідко потрібно.
Текст змінної довжини з необов'язковим лімітом.Обмежені рядки, як-от імена користувачів або електронна пошта.
Текст змінної довжини без обмеження довжини.Універсальна рядкова колонка; жодного штрафу продуктивності проти varchar.
Час
Календарна дата без часу доби.Дні народження та терміни виконання.
Час доби з часовим поясом або без нього.Щоденні нагадування або години роботи.
Дата й час без часового поясу.Застарілі схеми; у нових роботах уникайте.
Дата й час, збережені як UTC, показані в зоні клієнта.Типовий вибір для будь-якого реального моменту; обирайте замість timestamp.
Проміжок часу, як-от 2 дні або 3 години.Тривалості та арифметика дат.
Булеві, UUID та байти
Істина або хибність.Прапорці та перемикачі.
128-бітний універсальний унікальний ідентифікатор.Непослідовні ідентифікатори, безпечні для відкритого показу (генеруйте в застосунку або через gen_random_uuid).
Сирі двійкові байти.Блоби, зображення та непрозорі дані; великі файли краще тримати в об'єктному сховищі.
Рядки бітів фіксованої або змінної довжини.Упаковані прапорці та поля протоколів; один перемикач on/off — це все одно boolean.
JSON і напівструктуровані
JSON, розібраний у двійкову індексовану форму.Гнучкі або вкладені дані; рекомендована JSON-колонка (підтримує GIN-індекси).
JSON, збережений як вихідний текст.Рідко; лише коли треба зберегти порядок ключів або точні пробіли.
XML-текст.Застарілі інтеграції, що вимагають XML.
Скомпільований вираз шляху для навігації JSON-даними.Фільтрація всередині jsonb через jsonb_path_query та оператори SQL/JSON.
Мережа та пошук
Адреса хоста IPv4 або IPv6.Зберігання IP клієнтів або серверів.
Мережевий блок IP, як-от 10.0.0.0/24.Правила фаєрвола та діапазони підмереж.
MAC-адреса з 6 або 8 байтів (EUI-64).Ідентифікатори пристроїв і мережевих інтерфейсів.
Попередньо оброблений текст для повнотекстового пошуку.Вбудований пошук Postgres, перш ніж братися за окремий пошуковий рушій.
Пошукові терміни, об'єднані операторами AND, OR та префікса.Половина запиту повнотекстового пошуку, зіставляється з tsvector через @@.
Позиція у журналі попереднього запису, номер послідовності журналу.Моніторинг затримки реплікації та резервних копій.
Складені та просунуті
Масив будь-якого базового типу, напр. integer[].Списки простих значень; коли елементам потрібні власні колонки — дочірня таблиця.
Одне значення зі сталого списку, який ви визначаєте.Поля статусу зі стабільним набором варіантів.
Власний тип-рядок із кількох полів.Групи полів, що повторюються у кількох таблицях.
Безперервний діапазон між двома межами.Розклади, цінові діапазони та проміжки версій з операторами перетину.
Базовий тип, обгорнутий у визначені вами обмеження.Повторно використовувані правила, як-от непорожній email, що діють у кожній колонці, яка їх використовує.
Безіменний рядок типізованих значень.Повернення функцій PL/pgSQL та проміжні результати запитів.
Вбудовані двовимірні геометричні значення.Проста геометрія на площині; реальним локаціям потрібен PostGIS.
Беззнаковий 4-байтовий системний ідентифікатор об'єкта.З'єднання системних каталогів; не для колонок застосунку.
Внутрішній рядок-ідентифікатор до 63 символів.Запити до каталогів; для всього видимого користувачам — звичайний text.
Типи розширень
Пари ключ/значення-рядки в одному значенні (розширення).Плоскі мапи; сьогодні jsonb покриває це краще.
Ієрархічний шлях міток, як-от news.tech.ai (розширення).Дерева із запитами предків і нащадків.
Текст, що порівнюється без урахування регістру (розширення).Регістронезалежна унікальність, як-от email, без індексу lower().
Географічні та геометричні об'єкти з розширення PostGIS.Запити відстані, вмісту та просторових індексів.
Функції розширення, що генерують значення UUID.Застаріла генерація; від PG 13 gen_random_uuid() вбудовано.