CREATE TYPE
Определение нового типа данных в базе.
Синтаксис:
CREATE TYPE тип (INPUT = входная_функция, OUTPUT = входная_функция , INTERNALLENGTH = { внутренний_размер | VARIABLE } [, EXTERNALLENGTH – { внешний_размер | VARIABLE } ] [, DEFAULT = "значение_по^умолчанию" ] [, ELEMENT = элемент ] [. DELIMITER = разделитель ] [, SEND = функция_отправки ] [, RECEIVE = функция_получения ] [, PASSEDBYVALUE ] [, ALIGNMENT = выравнивание ] [, STORAGE = хранение ])
Параметры:
- тип. Имя нового типа. Максимальная длина имени равна 30 символам. Имена типов должны быть уникальными в рамках базы данных и не могут начинаться с символа подчеркивания (зарезервирован для типов косвенно определяемых массивов).
- внутренний_размер. Внутренний размер определяемого типа (в байтах).
- внешний_размер. Внешний размер определяемого тина (в байтах).
- входная_функция. Имя входной функции определяемого типа. Функция должна быть заранее определена командой CREATE FUNCTION и должна преобразовывать внешнее представление типа во внутреннее представление.
- выходная_функция. Имя выходной функции определяемого типа. Функция должна преобразовывать внутреннее представление типа во внешнее представление (форму, предназначенную для вывода).
- элемент. Тип данных отдельного элемента массива, адресуемого данным типом (при самостоятельной реализации типов для хранения массивов). Параметр элемент должен быть типом данных фиксированного размера.
- разделитель. Разделитель значений для косвенно определяемых массивов, связанных с типом (тип[]).
- значение_по_умолчанию. Значение по умолчанию для нового типа данных. Если значение не указано, по умолчанию поля заполняются либо величиной, указанной в ограничении DEFAULT уровня таблицы, либо псевдозначениямп NULL.
- функция_отправки. Имя функции отправки для определяемого типа. Функция преобразует данные в форму, подходящую для передачи на другой компьютер, однако в PostgrcSQL 7.1.x такая возможность не поддерживается, поэтому параметр не используется.
- функция_получения. Имя функции получения для определяемого типа. Функция получает данные в форме, сгенерированной функцией отправки, и восстанавливает но ней внутреннее представление типа. В PostgreSQL 7.1.х такая возможность не поддерживается, поэтому параметр не используется.
- PASSEDBYVALUE. Необязательное ключевое слово PASSEDBYVALUE означает, что операторы п функции, использующие определяемый тип данных, должны передавать соответствующие аргументы по значению, а не по ссылке (как происходит по умолчанию). Параметр не может использоваться с типами, внутреннее представление которых занимает более 4 байт.
- выравнивание. Способ выравнивания определяемого типа в памяти. Допустимые значения – char, int2, int4 и double. Если параметр не задан, по умолчанию выбирается значение int4.
- хранение. Принцип храпения значений определяемого типа. Допустимые значения – plain, external, extended и main. Если параметр не задан, по умолчанию выбирается значение plain.
Результаты:
CREATE. Это сообщение выдается при успешном создании типа.
Описание
Команда CREATE TYPE предназначена для регистрации новых пользовательских типов в текущей базе данных. Пользователь PostgreSQL, выполнивший команду, становится владельцем нового типа.
При создании нового типа указываются две пользовательские функции, написанные на С, – входная и выходная функции определяемого типа данных. Входная функция преобразует внешнее представление типа во внутреннее представление, которое используется системными объектами, связанными с этим типом. Выходная функция преобразует внутреннее представление во внешнее.
Обе функции, входная и выходная, вызываются с одним аргументом типа opaque. Выходная функция должна возвращать тип opaque, тогда как входная функция возвращает значение определяемого типа. Обратите внимание: функции должны быть определены до создания типа.
Тип определяется с фиксированным или с переменным размером. Если вы хотите создать тип фиксированного размера, присвоите параметру INTERNALLENGTH нужное числовое значение (в байтах). Если тип определяется с переменным размером, используйте ключевое слово VARIABLE вместо параметра INTERNALLENGTH; в этом случае размер будет определяться по тем же правилам, что и для типа text. Внешний размер (EXTERNALLENGTH) задается по тому же принципу – в виде числового значения или с ключевым словом VARIABLE.