Иллюстрированный самоучитель по PostgreSQL

CREATE TYPE

После создания нового типа PostgreSQL автоматически определяет тип массива для нового типа данных. Во внутреннем представлении этому типу присваивается имя_тип (с начальным символом подчеркивания). Все ссылки вида тип[] автоматически преобразуются к внутреннему типу массива (_тип).

Параметр DELIMITER позволяет задать символ-разделитель для массивов. Этот символ используется для разделения элементов массивов в константах, передаваемых PostgreSQL (например, {1, 2, 3}), а также при разделении элементов во внешнем отображении массивов этого типа. По умолчанию в качестве разделителя используется запятая.

Если вы предпочитаете смоделировать массив вручную, передайте функции PostgreSQL значения array_in и array_out в качестве входной и выходной функций соответственно, затем при помощи ключевого слова ELEMENT задайте типы данных элементов массива.

Ключевое слово DEFAULT задает значение по умолчанию, действующее при вставке в новое поле, на уровне системы. Обычно при отсутствии значения и ограничений DEFAULT поля инициализируются псевдозначением NULL. Учтите, что в PostgreSQL 7.1.x задается внутреннее представление значения по умолчанию.

Параметр выравнивание определяет принцип выравнивания нового типа данных в памяти. Для типов данных с переменным внутренним размером должно быть выбрано значение int4 или double.

Параметр храпение определяет метод хранения данных. Для типов данных с фиксированным внутренним размером может задаваться только тип plain, а для типов с переменной внутренней длиной допустимы значения plain, extended, external или main.

При выборе метода plain данные хранятся в несжатом, "буквальном" представлении, максимальный размер составляет 8 Кбайт. Метод extended позволяет превысить порог и работать со значениями большего размера, а также хранить данные вне физической таблицы с использованием расширения PostgreSQL TOAST (The Oversized Attribute Storage Technique), разработанного Томом Лейном (Tom Lane).

Метод external обладает определенным сходством с методом extended, но не пытается сжимать данные перед тем, как использовать расширение TOAST для хранения данных вне физических таблиц. Метод main тоже похож на extended – он также поддерживает сжатие и расширение TOAST, но ориентирован на физическое хранение данных в главной таблице и выбирает другой способ только в том случае, если не остается иного выбора.

Пример

В следующем примере создается новый числовой тип данных с именем zero, всегда представляющий нулевое значение. Сначала мы создаем входную и выходную функции, а затем определяем тип данных путем ссылок на эти функции.

booktown=# CREATE FUNCTION zero_out(opaque) RETURNS opaque
booktown-# AS '/usr/local/pgsql/lib/zero.so' LANGUAGE 'C';
CREATE
booktown=# CREATE FUNCTION zero_in(opaque) RETURNS zero
booktown-# AS '/usr/local/pgsql/lib/zero.so' LANGUAGE 'C';
NOTICE: ProcedureCreate: type 'zero' is not yet defined
CREATE
booktown=# CREATE TYPE zero (internallength = 16,
booktown(# input = zero_in, output = zero_out);
CREATE
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.