BUG #16545: COALESCE evaluates arguments to the right of the first non-null argument

Поиск
Список
Период
Сортировка
От PG Bug reporting form
Тема BUG #16545: COALESCE evaluates arguments to the right of the first non-null argument
Дата
Msg-id 16545-affff840bc4e72ca@postgresql.org
обсуждение исходный текст
Ответы Re: BUG #16545: COALESCE evaluates arguments to the right of the first non-null argument  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
The following bug has been logged on the website:

Bug reference:      16545
Logged by:          Petr Jac
Email address:      jac@uol.cz
PostgreSQL version: 12.3
Operating system:   docker@ubuntu20.04
Description:

Hello,

after upgrading PostgreSQL from 10 to 11 I have found out different
behaviour of COALESCE function.

It seems to me that it became to evaluate arguments to the right of the
first non-null argument which is in contradiction with documentation:

>"Like a CASE expression, COALESCE only evaluates the arguments that are
needed to determine the result; that is, arguments to the right of the first
non-null argument are not evaluated. This SQL-standard function provides
capabilities similar to NVL and IFNULL, which are used in some other
database systems."

I can demonstrate this with example running in pure docker postgres
instances:

### PostgreSQL 10.13
postgres=# SELECT version();
                                                              version
                                                       

------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 10.13 (Debian 10.13-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled
by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
(1 row)

postgres=# SELECT coalesce((SELECT 'ONE'),
                (SELECT 'TWO'
                  WHERE '123' ~
((xpath('/tag/text()','<tag>[</tag>'))[1]::TEXT)
                )
);
 coalesce 
----------
 ONE
(1 row)

### PostgreSQL 11.8
postgres=# SELECT version();
                                                             version
                                                     

----------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 11.8 (Debian 11.8-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled
by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
(1 row)

postgres=# SELECT coalesce((SELECT 'ONE'),
                (SELECT 'TWO'
                  WHERE '123' ~
((xpath('/tag/text()','<tag>[</tag>'))[1]::TEXT)
                )
);
ERROR:  invalid regular expression: brackets [] not balanced

### PostgreSQL 12.3
postgres=# SELECT version();
                                                     version
                                     
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled
by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 row)

postgres=# SELECT coalesce((SELECT 'ONE'),
                (SELECT 'TWO'
                  WHERE '123' ~
((xpath('/tag/text()','<tag>[</tag>'))[1]::TEXT)
                )
);
ERROR:  invalid regular expression: brackets [] not balanced

---
Thank you


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

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: BUG #16526: pg_test_fsync in v12 doesn't run in Windows
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #16545: COALESCE evaluates arguments to the right of the first non-null argument