Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db_lectures / 03. Типы данных PostgreSQL.docx
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
60.86 Кб
Скачать

8.5. Типы дата/времени

PostgreSQL поддерживает полный список SQL типов даты и времени.

timestamp [ (p) ] [ without time zone ] 8 байт и дата и время (без часового пояса) 4713 BC 294276 AD 1 микросекунда / 14 разрядов

timestamp [ (p) ] with time zone 8 байт и дата и время с часовым поясом 4713 BC 294276 AD 1 микросекунда / 14 разрядов

date 4 байта дата (без часового пояса) 4713 BC 5874897 AD 1 день

time [ (p) ] [ without time zone ] 8 байт только время (без даты) 00:00:00 24:00:00 1 микросекунда / 14 разрядов

time [ (p) ] with time zone 12 байт время с часовым поясом 00:00:00+1459 24:00:00-1459 1 микросекунда / 14 разрядов

interval [ fields ] [ (p) ] 12 байт интервал времени -178000000 лет 178000000 лет 1 микросекунда / 14 разрядов

Для типов time, timestamp и interval можно указывать необязательное значение точности p, которое задаёт количество дробных разрядов после запятой. По умолчанию, точность в явном виде не указывается. Допустимый диапазон значения p от 0 до 6 для типа timestamp и для типа interval.

Тип time with time zone определяется стандартом SQL, но это определение говорит о свойствах, которые приводят нас к сомнениям относительно пригодности. В большинстве случаев, комбинация типов date, time, timestamp without time zone и timestamp with time zone предоставляет полный диапазон функциональности для работы с датой и временем, который бы мог потребоваться какому-либо приложению.

8.5.6. Некоторые подробности по датам

PostgreSQL использует для всех вычислений даты/времени Юлианский календарь. У него есть прекрасное свойство вычислять любую дату, которая следует за годом 4713 до н.э., потому что используется длина года, равная 365.2425 дням.

Соглашения по датам, которые использовались до 19-го века интересны, но не позволяют целостно использовать их при кодировании обработки даты/времени.

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

PostgreSQL предоставляет стандартный SQL тип boolean. Значений типа boolean может быть два: "true"(истина) или "false"(ложь). Третье состояние "unknown"(неизвестно) представляется SQL значением NULL.

Допустимые литеральные значения для "true" это:

TRUE 't' 'true' 'y' 'yes' 'on' '1'

Для "false" могут быть использованы такие значения как:

FALSE 'f' 'false' 'n' 'no' 'off' '0'

Побелы в начале и в конце игнорируются, а регистр букв значения не имеет. Предпочтительным (и соответствующим стандарту SQL) является использование ключевых слов TRUE и FALSE.

Значения boolean используют для хранения 1 байт.

8.7. Перечисления

Перечисления (enum) — это такие типы данных, которые состоят из статических, упорядоченных списков значений. Они эквивательны типам enum в некоторых языках программирования. В качестве примера типа enum можно привести дни недели или список состояний для каких-либо данных.

Типы Enum создаются с помощью команды CREATE TYPE, например:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

Однажны созданный, тип enum может использоваться в таблицах и при определении функций точно также как и другие типы:

Порядок значений в типе enum точно такой же какой был указан при создании типа. Для перечислений поддерживаются все стандартные операции сравнения и агрегатные функции. Например:

Каждый тип перечисления является полностью отдельным типом данных и не может сравниваться с другим.

Тип enum занимает четыре байта на диске. Длина значения типа enum (текстовой метки) ограничена настройкой NAMEDATALEN, вкомпилированной в PostgreSQL; и при стандартной сборке, составляет по крайней мере 63 байта.

Значения перечислений зависят от регистра букв, так что 'happy' не тоже самое, что 'HAPPY'. Пробелы в значениях также учитываются.

Преобразования из внутренних значений перечисления в текстовые метки осуществляется в системном каталоге pg_enum. Может оказаться полезным опросить этот каталог напрямую.