Re: BUG #18314: PARALLEL UNSAFE function does not prevent parallel index build

Поиск
Список
Период
Сортировка
От jian he
Тема Re: BUG #18314: PARALLEL UNSAFE function does not prevent parallel index build
Дата
Msg-id CACJufxFFmFKeLBgQfwyGCEoTyEoksXgbJ0uWc=whPu5fk=LXwA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #18314: PARALLEL UNSAFE function does not prevent parallel index build  (Tender Wang <tndrwang@gmail.com>)
Ответы Re: BUG #18314: PARALLEL UNSAFE function does not prevent parallel index build  (jian he <jian.universality@gmail.com>)
Список pgsql-bugs
On Wed, Feb 7, 2024 at 7:54 PM Tender Wang <tndrwang@gmail.com> wrote:
>
> In pg document, I found this:
>
> Also, a block containing an EXCEPTION clause effectively forms a subtransaction that can be rolled back without
affectingthe outer transaction. 
>
> So it will report error for this case even though we replace PARALLEL UNSAFE with PARALLEL SAFE.
>
> I think if PARALLEL UNSAFE is specified by users,  PG internal should not choose to build index parallel, even if the
functionis 
> too simply that can be transform to Const node.
>
> Attached patch will fix Alexander reported issue. I choose pass the raw index expression to is_parallel_safe().
> The comments of RelationGetIndexExpressions() doesn't say it will return optimized expression. So I add a bool
argumentto RelationGetIndexExpressions(). 
> I don't decide to write a new function like RelationGetIndexRawExpression. I think the RelationGetIndexExpressions()
isenough after adding a bool argument to indicate 
> whether caller needing a raw index expression.
>
> But if users specify PARALLEL SAFE, like I said before, it also reports error. But I think it is another thing. Maybe
itis reasonable? 
>

/home/jian/Downloads/patches/0001-Fix-parallel-index-build-failed.patch:273:
trailing whitespace.
BEGIN
warning: 1 line adds whitespace errors.

+CREATE TABLE btree_para_bld(i int);
+INSERT INTO btree_para_bld SELECT g FROM generate_series(1, 300000) g;
+CREATE INDEX ON btree_para_bld((i + para_unsafe_f()));
you don't need an insert of 300000 rows to test it.

you can just
CREATE TABLE btree_para_bld(i int);
ALTER TABLE btree_para_bld SET (parallel_workers = 4);
SET max_parallel_maintenance_workers TO 4;
CREATE INDEX ON btree_para_bld(i) WHERE i > para_unsafe_f();
reset max_parallel_maintenance_workers;

demo: https://dbfiddle.uk/HpLKN6zj



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

Предыдущее
От: just madhu
Дата:
Сообщение: Re: pgjdbc is not working with PKCS8 certificates with password
Следующее
От: Laurenz Albe
Дата:
Сообщение: Re: BUG #18336: Inconsistency in PostgreSQL 16 Documentation for SHOW Command