El 03/05/2013 17:12, Jaime Casanova escribió:
2013/5/3 Alvaro Herrera <alvhe...@2ndquadrant.com>:
Oswaldo escribió:


En el resultado final la columna 'dom' tiene un valor NULL cuando
según las reglas definidas esto no deberia ser posible y se deberia
haber producido una excepción.

Hola, no tengo claro que esto sea un bug, pero como es un caso de borde,
siéntete libre de reportarlo y ver qué opinan los desarrolladores.


Saludos,

El caso parece que ya es conocido, por ejemplo en
http://www.postgresql.org/docs/9.2/static/sql-createdomain.html dice:
"""
NOT NULL

Values of this domain are normally prevented from being null. However,
it is still possible for a domain with this constraint to take a null
value if it is assigned a matching domain type that has become null,
e.g. via a LEFT OUTER JOIN, or INSERT INTO tab (domcol) VALUES
((SELECT domcol FROM tab WHERE false)).
"""

Eso es exactamente lo que esta pasando.

También sucede si desde una funcion normal o trigger se intenta esto:

    select into v_rec * from test2 where false;
    update test2 set dom=v_rec.dom;


El declarar en el dominio explícitamente un check tampoco vale:

create domain t_dom as varchar default '' CONSTRAINT "dominio no nulo" check (value is not null);

Da la impresión de que al provenir el valor de una columna del mismo tipo se omiten los chequeos.


Sin embargo, concuerdo en que debería reportarse para ver si eso
conlleva a alguna resolución


Ok, lo reportaré. De momento seguiré el consejo de Álvaro y revisaré todas las declaraciones de tablas agregándole el not null a las columnas aunque ya esté definido en el dominio.

Gracias por vuestra ayuda.


--
Oswaldo

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a