Re: Fwd: Unexpected Multiple Records from Randomized Query

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Fwd: Unexpected Multiple Records from Randomized Query
Дата
Msg-id 813880.1708700965@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Fwd: Unexpected Multiple Records from Randomized Query  (김명준 <audwns525@gmail.com>)
Список pgsql-general
=?UTF-8?B?6rmA66qF7KSA?= <audwns525@gmail.com> writes:
> explain analyze
> SELECT * FROM users WHERE name = 'User '||trunc(random()*100) ;

> I expected the result to return one record. However, in some cases, the
> result comes back with 2 or 3 records. What am I doing wrong?

random() is re-evaluated at each row, so it's not that surprising
if you sometimes get multiple matches.  This is the same behavior
that you relied on to fill the table with not-all-the-same names.

The preferred way to avoid that is to stuff the random() call into
a CTE:

WITH x AS (SELECT random() AS r)
SELECT * FROM users, x WHERE name = 'User '||trunc(r*100) ;

or in this case better to shove the whole constant computation
into the CTE.

            regards, tom lane



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

Предыдущее
От: Vick Khera
Дата:
Сообщение: Re: How to schema-qualify "IS DISTINCT FROM" on trigger definition? (I created a db that cannot be dump/restored)
Следующее
От: "Peter J. Holzer"
Дата:
Сообщение: Re: Postgres 16 missing from apt repo?