Re: Wrong result for comparing ROW(...) with IS NOT NULL
От | Pavel Stehule |
---|---|
Тема | Re: Wrong result for comparing ROW(...) with IS NOT NULL |
Дата | |
Msg-id | CAFj8pRAKiVUUFQawx70MXwd72rJ6D4UQFwAcmL5VVByE90HuYg@mail.gmail.com обсуждение исходный текст |
Ответ на | Wrong result for comparing ROW(...) with IS NOT NULL (Wolfgang Walther <walther@technowledgy.de>) |
Ответы |
Re: Wrong result for comparing ROW(...) with IS NOT NULL
|
Список | pgsql-bugs |
Hi
čt 5. 11. 2020 v 13:32 odesílatel Wolfgang Walther <walther@technowledgy.de> napsal:
Hi,
when I do the following on PG 12.4, I get some unexpected results:
SELECT
ROW() IS NULL, -- true
ROW() IS NOT NULL; -- true
Both return true here. In any case IS NULL should return the opposite
from IS NOT NULL, right?
for composite types this sentence is not valid
is null - is true, when all fields are null, and is not null is true, when all fields is not null.
Regards
Pavel
The same happens here:
SELECT
ROW(NULL, NULL) IS NULL, -- returns: true (expected)
ROW(NULL, NULL) IS NOT NULL, -- returns: false (expected)
ROW(1, NULL) IS NULL, -- returns: false (expected)
ROW(1, NULL) IS NOT NULL, -- returns: false !!
ROW(1, 1) IS NULL, -- returns: false (expected)
ROW(1, 1) IS NOT NULL; -- returns: true (expected)
The docs[1] say:
> Also, it is possible to [...] test a row with IS NULL or IS NOT NULL,
for example:
> [...]
> SELECT ROW(table.*) IS NULL FROM table; -- detect all-null rows
So I would expect the ROW(1, NULL) IS NOT NULL to be true, because it's
not "all-null". I'm not sure what I would expect ROW() to be, but surely
not the same for IS NULL and IS NOT NULL.
Best
Wolfgang
[1]:
https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
В списке pgsql-bugs по дате отправления: