Числовые типы
Тип serial
Хотя тип serial не относится к числу стандартных типов, он часто используется при создании в таблице полей-идентификаторов, содержащих уникальное значение для каждой записи. В типе serial объединены функциональные возможности 4-байтового типа integer, индекса и последовательности. В листинге 3.24 тип serial генерирует уникальный идентификатор для каждой записи в таблице auto_identified.
В листинге 3.25 та же задача решается при помощи поля типа integer, функции nextval() и последовательности (последовательности описаны в главе7). На момент написания книги эти два способа были функционально тождественными.
Листинг 3.24. Использование типа serial.
booktown=# CREATE TABLE autojdentified (id_serial); NOTICE: CREATE TABLE will create implicit sequence ' auto Jdentif led Jd_seq' for SERIAL column 'auto_identified.id' NOTICE: CREATE TABLE/UNIQUE will create Implicit index 'auto_identified_1d_key' for table 'autojdentified' CREATE
Листинг 3.25. Решение задачи "вручную".
booktown=# CREATE SEQUENCE autojdentified id_seq; CREATE booktown=# CREATE TABLE autojdentified booktown-# (id integer UNIQUE DEFAULT nextval('autojdentifiedjd_seq')); NOTICE: CREATE TABLE/UNIQUE will create implicit index 'autojdentifiedjdjcey' for table 'autojdentified' CREATE
Внимание
После удаления таблицы последовательность, созданная для типов serial, автоматически не удаляется. При удалении таблиц, содержащих поля типа serial, эти последовательности должны удаляться отдельно.
Дата и время
Следующая категория типов является удобным средством для хранения даты и времени в универсальной структуре SQL. При этом программист избавляется от хлопот, связанных с форматом хранения (как, например, при хранении этих данных в символьных строках). В PostgreSQL все вычисления с датой и временем производятся но юлианскому календарю. Продолжительность года считается равной 365.24 дня, что обеспечивает правильное представление любой даты с 4713 года до нашей эры и далеко в будущее.
В PostgreSQL поддерживаются все типы даты и времени, определенные в стандарте SQL92 (табл. 3.14), а также некоторые вспомогательные типы PostgreSQL, помогающие решить проблемы с представлением часовых поясов в SQL92.
Таблица 3.14. Типы даты и времени.
Тип данных | Размер | Описание | Интервал |
---|---|---|---|
date | 4 байта | Календарная дата (год, месяц и день) | От 4713 г. до н. э. до 32 767 г. н. э. |
time | 4 байта | Время суток без часового пояса | От 00:00:00 до 23:59:59.99 |
time with time zone | 4 байта | Время суток с часовым поясом | От 00:00:00+12 до 23:59:59.99-12 |
timestamp with time zone, 8 байт Календарная дата и время От 1903 г. н. э. timestamp с часовым поясом до 2037 г. н. э. interval 12 байт Общий промежуток От-1780 000 000 лет времени до 1 780 000 000 лет