PostgreSQL admite la creación de tipos de datos definidos por el usuario mediante las siguientes declaraciones:
- CREAR DOMINIO: crea un tipo de datos definido por el usuario que puede tener restricciones opcionales.
- CREAR TIPO: a menudo se aplica para crear un tipo compuesto (tipo de datos que son mezclas de dos o más tipos de datos) utilizando procedimientos almacenados.
CREAR DOMINIO:
en PostgreSQL, un dominio es un tipo de datos que tiene restricciones opcionales. Es imprescindible tener un nombre único y un rango de esquema bien definido.
Ejemplo:
Primero, creamos una tabla (digamos, hoja de calificaciones) usando el siguiente comando:
CREATE TABLE marksheet ( student_id SERIAL PRIMARY KEY, first_name VARCHAR NOT NULL, last_name VARCHAR NOT NULL, email VARCHAR NOT NULL, marks_obtained INT NOT NULL, CHECK ( first_name !~ '\s' AND last_name !~ '\s' ) );
Los campos first_name y last_name no son nulos y no deben contener espacios. Para la simplicidad de los profesores, podemos crear un dominio student_detail usando el siguiente comando:
CREATE DOMAIN student_detail AS VARCHAR NOT NULL CHECK (value !~ '\s');
Ahora podemos usar student_detail como el tipo de datos de los campos first_name y last_name de la siguiente manera:
CREATE TABLE marksheet ( student_id serial PRIMARY KEY, first_name student_detail, last_name student_detail, marks_obtained INT NOT NULL, email VARCHAR NOT NULL );
Ahora inserte algunos datos en la tabla usando el siguiente comando:
INSERT INTO marksheet (first_name, last_name,marks_obtained, email) VALUES ( 'Raju K', 'Singh', 95, 'rajukumar@gmail.com' );
En esta etapa, PostgreSQL generará el siguiente error:
ERROR: value for domain marksheet violates check constraint "marksheet_check"
Entonces, el comportamiento es como esperábamos. Para modificar o eliminar un dominio, se puede hacer uso de ALTER DOMAIN o DROP DOMAIN respectivamente.
Para obtener todos los dominios en la base de datos actual, use el siguiente comando:
\dD
Producción:
Publicación traducida automáticamente
Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA