Re: Wrong result for comparing ROW(...) with IS NOT NULL

Поиск
Список
Период
Сортировка
От Wolfgang Walther
Тема Re: Wrong result for comparing ROW(...) with IS NOT NULL
Дата
Msg-id 4a853592-a43b-b677-5026-212196b6e9c2@technowledgy.de
обсуждение исходный текст
Ответ на Re: Wrong result for comparing ROW(...) with IS NOT NULL  (Pavel Borisov <pashkin.elfe@gmail.com>)
Ответы Re: Wrong result for comparing ROW(...) with IS NOT NULL  (Wolfgang Walther <walther@technowledgy.de>)
Список pgsql-bugs
Pavel Borisov:
> Sure, it is described here: 
> https://www.postgresql.org/docs/13/functions-comparison.html
> 
> "If the /|expression|/ is row-valued, then |IS NULL| is true when the 
> row expression itself is null or when all the row's fields are null, 
> while |IS NOT NULL| is true when the row expression itself is non-null 
> and all the row's fields are non-null. Because of this behavior, |IS 
> NULL| and |IS NOT NULL| do not always return inverse results for 
> row-valued expressions; in particular, a row-valued expression that 
> contains both null and non-null fields will return false for both tests. 
> In some cases, it may be preferable to write /|row|/|IS DISTINCT FROM 
> NULL| or /|row|/|IS NOT DISTINCT FROM NULL|, which will simply check 
> whether the overall row value is null without any additional tests on 
> the row fields."


Thank you, that explains it very well.

When I realized there was something unexpected going on, I was looking 
at all the ROW() syntax in the docs and I found this (as mentioned 
upthread):

https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS

It might be worth it to either add another example for IS NOT NULL, like

SELECT ROW(table.*) IS NOT NULL FROM table;  -- detect all-non-null rows

or add a link to section 9.2, that you mentioned. Or do both.



Another thing that could be improved:

Below that example there is a link to section 9.24. The link is:

https://www.postgresql.org/docs/current/functions-comparisons.html

The link you gave me to section 9.2 is (replaced 13 with current):

https://www.postgresql.org/docs/current/functions-comparison.html

Like really? The only difference is the "s" in comparison(s). That 
confused me at first for a bit, because I thought I had read your link 
already :)

I think that link for 9.24 could be much better chosen. 
row-array-comparisons.html would match the content.


Best

Wolfgang



В списке pgsql-bugs по дате отправления:

Предыдущее
От: Pavel Borisov
Дата:
Сообщение: Re: Wrong result for comparing ROW(...) with IS NOT NULL
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: BUG #16702: inline code and function : when use dynamic name for rowtype, there is some bug!