CREATE TYPE

Nombre

CREATE TYPE  --  Define un nuevo tipo de datos base

Synopsis

CREATE TYPE typename
( INPUT = input_function,
  OUTPUT = output_function
  , INTERNALLENGTH = { internallength
   | VARIABLE }
  [ , EXTERNALLENGTH = { externallength
    | VARIABLE } ]
  [ , DEFAULT = "default" ]
  [ , ELEMENT = element ]
  [ , DELIMITER = delimiter ]
  [ , SEND = send_function ]
  [ , RECEIVE = receive_function ]
  [ , PASSEDBYVALUE ] )
  

Entradas

typename

El nombre del tipo a ser creado.

internallength

Un valor literal, el cual especifica la longitud interna del nuevo tipo.

externallength

Un valor literal, el cual especifica la longitud externa del nuevo tipo.

input_function

El nombre de una función, creada mediante CREATE FUNCTION, la cual convierte los datos desde su forma externa a la forma interna de tipo.

output_function

El nombre de una función, creada mediante CREATE FUNCTION, la cual convierte los datos desde su forma interna a una forma conveniente para ser mostrados.

element

El tipo creado es un array; esto especifica el tipo de los elementos del array.

delimiter

El carácter delimitador para el array.

default

El texto por defecto que se mostrar  para indicar "datos no presentes"

send_function

El nombre de una función, creada mediante CREATE FUNCTION, la cual convierte los datos de este tipo a una forma adecuada para ser transmitidos a otra máquina.

receive_function

El nombre de una función, creada mediante CREATE FUNCTION, la cual convierte los datos de este tipo a una forma adecuada para su transmisión desde otra máquina a la forma interna.

Salidas

CREATE

Mensaje que se devuelve si el tipo ha sido creado con éxito.

Descripción

CREATE TYPE permite al usuario registrar un nuevo tipo de datos de usuario con Postgres para ser usado en la base de datos actual. El usuario que define un tipo se convierte en su propietario. typename es el nombre de del nuevo tipo y debe ser único dentro de los tipos definidos para esta base de datos.

CREATE TYPE necesita el registro de dos funciones (usando create function) antes de definir el tipo. La representación de un nuevo tipo base está determinada por input_function, la cual convierte la representación externa del tipo a una representación interna, utilizable por los operadores y funciones definidas por el tipo. Naturalmente output_function ejecuta la transformación inversa. Ambas funciones, la de entrada y la de salida deben ser declaradas para asumir uno o dos argumentos de tipo "opaque".

Los nuevos tipos de datos base pueden ser de longitud fija, en cuyo caso internallength es un entero positivo, o también pueden ser de longitud variable, en cuyo caso, Postgres asume que el nuevo tipo tiene el mismo formato que el tipo de datos suministrado por Postgres, "text". Para indicar que un tipo es de longitud variable, se debe especificar internallength como VARIABLE. La representación externa se especifica de forma similar usando la palabra clave externallength.

Para indicar que un tipo es un array y para indicar que un tipo tiene elementos de array, indique el tipo del elemento del array usando la palabra clave element. Por ejemplo, para definir un array de enteros de cuatro bytes ("int4"), especifique

ELEMENT = int4

Para indicar el delimitador a ser usado en arrays de este tipo, delimiter se puede fijar a un carácter espec¡fico. El delimitador por defecto es la coma (",").

Opcionalmente, hay un valor por defecto disponible en caso de que un usuario quiera algún patrón de bit espec¡fico para expresar "datos no presentes." Especifique el valor por defecto con la palabra clave DEFAULT.

RATIONALE:

Cómo el usuario especifica este patrón de bit y lo asocia con el hecho de que los datos no estén presentes>

Los argumentos opcionales send_function y receive_function son usados cuando el programa de aplicación que demanda los servicios Postgres reside en una máquina diferente. En este caso, la máquina en la cual se ejecuta Postgres puede usar un formato para el tipo de datos diferente del usado en la máquina remota. En este caso es conveniente convertir los items de datos a una forma estándar cuando se envien desde el servidor al cliente y convertirlos del formato estándar al espec¡fico de la máquina cuando el servidor recibe los datos desde el cliente. Si estas funciones no est n especificadas, se asume que el formato interno del tipo es aceptable en todas las arquitecturas de máquina releveantes. Por ejemplo, los caracteres simples no se tienen que convertir si se pasa desde un Sun-4 a un DECstation, pero muchos otros tipos s¡.

El flag opcional, PASSEDBYVALUE, indica que los operadores y funciones que usan este tipo de datos deben pasar los argumentos preferentemente por valor que por referencia. Dese cuenta de que no pasar¡a por valor tipos cuya representación interna es de más de cuatro bytes.

Para nuevos tipos base, un usuario puede definir operadores, funciones y conjuntos usando las facilidades apropiadas descritas en esta sección.

Tipos de Array

Existen dos funciones generalizadas incorporadas, array_in y array_out para la creación rápida de tipos de array de longitud variable. Estas funciones operan en arrays de cualquier tipo Posgres existente.

Tipos de objetos grandes

Un tipo Posgres regular sólo puede ser de longitud 8192 bytes. Si necesita un tipo mayor debe crear un tipo de objeto grande. El interface para estos tipos está ámpliamente explicado en The PostgreSQL Programmer's Guide. La longitud de todos los tipos de objeto grande es siempre VARIABLE.

Ejemplos

Este comando crea el tipo de datos box y después usa el tipo en una definición de clase:

CREATE TYPE box (INTERNALLENGTH = 8,
    INPUT = my_procedure_1, OUTPUT = my_procedure_2);
CREATE TABLE myboxes (id INT4, description box);
   

Este comando crea un tipo array de longitud variable con elementos enteros:

CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out,
    INTERNALLENGTH = VARIABLE, ELEMENT = int4);
CREATE TABLE myarrays (id int4, numbers int4array);
   

Este comando crea un tipo de objeto grande y lo usa en una definición de clase:

CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout,
    INTERNALLENGTH = VARIABLE);
CREATE TABLE big_objs (id int4, obj bigobj);
   

Notas

Los nombres de tipos no pueden empezar por el carácter guión bajo ("_") y sólo pueden tener una longitud de 31 carácteres. Esto es debido a que Postgres crea sin informar un tipo array para cada tipo base con un nombre que consiste en el nombre del tipo base precedido de un guión bajo.

Refiérase a DROP TYPE para borrar un tipo existente.

Vea también CREATE FUNCTION, CREATE OPERATOR y el cap¡tulo de Objetos Grandes, 'Large Objects', en PostgreSQL Programmer's Guide.

Compatibilidad

SQL3

CREATE TYPE es un elemento de SQL3.