![]() |
![]() |
![]() |
CREATE TYPE Определение нового типа данных в базе. Синтаксис CREATE TYPE тип ( INPUT = входная_функция, OUTPUT = входная_функция , INTERNALLENGTH = { внутренний_размер | VARIABLE } [ , EXTERNALLENGTH - { внешний_размер | VARIABLE } ] [ , DEFAULT = "значение_по^умолчанию" ] [ , ELEMENT = элемент ] [ . DELIMITER = разделитель ] [ , SEND = функция_отправки ] [ , RECEIVE = функция_получения ] [ , PASSEDBYVALUE ] [ , ALIGNMENT = выравнивание ] [ , STORAGE = хранение ] ) Параметры
Результаты CREATE. Это сообщение выдается при успешном создании типа. Описание Команда CREATE TYPE предназначена для регистрации новых пользовательских типов в текущей базе данных. Пользователь PostgreSQL, выполнивший команду, становится владельцем нового типа. При создании нового типа указываются две пользовательские функции, написанные на С, — входная и выходная функции определяемого типа данных. Входная функция преобразует внешнее представление типа во внутреннее представление, которое используется системными объектами, связанными с этим типом. Выходная функция преобразует внутреннее представление во внешнее. Обе функции, входная и выходная, вызываются с одним аргументом типа opaque. Выходная функция должна возвращать тип opaque, тогда как входная функция возвращает значение определяемого типа. Обратите внимание: функции должны быть определены до создания типа. Тип определяется с фиксированным или с переменным размером. Если вы хотите создать тип фиксированного размера, присвоите параметру INTERNALLENGTH нужное числовое значение (в байтах). Если тип определяется с переменным размером, используйте ключевое слово VARIABLE вместо параметра INTERNALLENGTH; в этом случае размер будет определяться по тем же правилам, что и для типа text. Внешний размер (EXTERNALLENGTH) задается по тому же принципу — в виде числового значения или с ключевым словом VARIABLE. После создания нового типа 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 для хранения данных вне физических таблиц. Метод mai n тоже похож на 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 |
![]() |
![]() |
![]() |