-- Prueba sobre tablas y tipos compuestos
CREATE TABLE foo (
fooid int,
foosubid int NOT NULL,
fooname text
);
-- Falla por la restriccion del NOT NULL
INSERT INTO foo VALUES (1,NULL,'prueba');
-- Cuando se crea la tabla foo se crea tambien un tipo compuesto foo, este tipo
-- sigue las mismas reglas que cuando se crea un tipo compuesto (no soporta los check).
CREATE FUNCTION test_composite_type (foo, integer)
RETURNS integer
LANGUAGE sql
AS $$
SELECT $1.fooid * $2;
$;
-- viola la regla del check impuesto en la tabla, pero no por el tipo
-- asi que esta funcion se ejecuta sin problemas y nos devuelve 2
SELECT test_composite_type (ROW(1,NULL,'prueba'),2);
CREATE TABLE nested_foo (
entero int,
tipo_foo foo
);
-- de nuevo inserta el tipo con el valor nulo
INSERT INTO nested_foo VALUES(1, ROW (1,NULL,'prueba'));
SELECT * FROM nested_foo;
-- solucion
CREATE DOMAIN foo_domain AS int
NOT NULL;
-- si no hacemos eso no nos deja alterar la tabla.
DROP TABLE nested_foo;
ALTER TABLE foo ALTER COLUMN foosubid TYPE foo_domain ;
-- marca error
-- ERROR: el dominio foo_domain no permite valores null
SELECT test_composite_type (ROW(1,NULL,'prueba'),2);
-- creamos de nuevo la tabla nested_foo
-- Ahora si obtenemos el siguiente error
-- ERROR: el dominio foo_domain no permite valores null
INSERT INTO nested_foo VALUES(1, ROW (1,NULL,'prueba'));
syntax highlighted by Code2HTML, v. 0.9.1
Para mayor informacion:
Composite Types
CREATE DOMAIN -- define a new domain
No hay comentarios.:
Publicar un comentario