Re: Bug with plpgsql handling of NULL argument of compound type
| От | Tom Lane |
|---|---|
| Тема | Re: Bug with plpgsql handling of NULL argument of compound type |
| Дата | |
| Msg-id | 15249.1469211237@sss.pgh.pa.us обсуждение |
| Ответ на | Bug with plpgsql handling of NULL argument of compound type (Jim Nasby <Jim.Nasby@BlueTreble.com>) |
| Ответы |
Re: Bug with plpgsql handling of NULL argument of compound
type
Re: Bug with plpgsql handling of NULL argument of compound type |
| Список | pgsql-hackers |
Jim Nasby <Jim.Nasby@BlueTreble.com> writes:
> CREATE DOMAIN text_not_null AS text NOT NULL;
> CREATE TYPE c AS( t text_not_null, i int );
> CREATE TABLE test_table( id serial, c c );
> CREATE OR REPLACE FUNCTION test_func(i test_table) RETURNS oid LANGUAGE
> plpgsql AS $$
> BEGIN
> RETURN pg_typeof(i);
> END$$;
> SELECT test_func(NULL);
> ERROR: domain text_not_null does not allow null values
> CONTEXT: PL/pgSQL function test_func(test_table) while storing call
> arguments into local variables
Arguably, that error is perfectly correct, not a bug.
There is a rather squishy question as to whether NULL::composite_type
should be semantically equivalent to ROW(NULL,NULL,...)::composite_type.
If it is, then the SELECT should have failed before even getting into the
plpgsql function, because ROW(NULL,NULL) is surely not a valid value of
type c. The SQL standard seems to believe that these things *are*
equivalent (at least, that was how we read the spec for IS [NOT] NULL).
We're not very good at making them actually act alike, but if they do act
alike in plpgsql, it's hard to call that a bug.
> FWIW, the only reason I created 'text_not_null' in my real-word case is
> because I have a compound type that I don't want to allow NULLS for some
> of it's fields.
FWIW, there is a very good argument that any not-null restriction on a
datatype (as opposed to a stored column) is broken by design. How do
you expect a LEFT JOIN to a table with such a column to work? We
certainly are not going to enforce the not-nullness in that context,
and that leads to the thought that maybe we should just deny the validity
of such restrictions across the board.
regards, tom lane
В списке pgsql-hackers по дате отправления: