crash with sql language partition support function
От | Amit Langote |
---|---|
Тема | crash with sql language partition support function |
Дата | |
Msg-id | 3041e853-b1dd-a0c6-ff21-7cc5633bffd0@lab.ntt.co.jp обсуждение исходный текст |
Ответы |
Re: crash with sql language partition support function
Re: crash with sql language partition support function Re: crash with sql language partition support function |
Список | pgsql-hackers |
Hi. I noticed that RelationBuildPartitionKey() is not doing the right thing with respect to which context it passes to fmgr.c to set a the (cached) partition support function's FmgrInfo's fn_mcxt. I noticed a crash while trying to change partition pruning tests to use manually created hash operator class per [1]. CREATE OR REPLACE FUNCTION hashint4_noop(int4, int8) RETURNS int8 AS $$SELECT coalesce($1)::int8$$ LANGUAGE sql IMMUTABLE STRICT; CREATE OPERATOR CLASS test_int4_ops FOR TYPE int4 USING HASH AS OPERATOR 1 = , FUNCTION 2 hashint4_noop(int4, int8); CREATE OR REPLACE FUNCTION hashtext_length(text, int8) RETURNS int8 AS $$SELECT length(coalesce($1))::int8$$ LANGUAGE sql IMMUTABLE STRICT; CREATE OPERATOR CLASS test_text_ops FOR TYPE text USING HASH AS OPERATOR 1 = , FUNCTION 2 hashtext_length(text, int8); create table hp (a int, b text) partition by hash (a test_int4_ops, b test_text_ops); create table hp0 partition of hp for values with (modulus 4, remainder 0); create table hp3 partition of hp for values with (modulus 4, remainder 3); create table hp1 partition of hp for values with (modulus 4, remainder 1); create table hp2 partition of hp for values with (modulus 4, remainder 2); insert into hp values (1, 'abcde'); INSERT 0 1 Time: 13.604 ms postgres=# insert into hp values (null, 'abcde'); server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Failed. Attached fixes it. It teaches RelationBuildPartitionKey() to use fmgr_info_cxt and pass rd_partkeycxt to it. Since this bug also exists in the released PG 10 branch, I also created a patch for that. It's slightly different than the one for PG 11dev, because there were some changes recently to how the memory context is manipulated in RelationBuildPartitionKey. That's v1-PG10-0001-Fix-a-memory-context-bug-in-RelationBuildPartitio.patch. Thanks, Amit [1] https://www.postgresql.org/message-id/CA%2BTgmoZ0D5kJbt8eKXtvVdvTcGGWn6ehWCRSZbWytD-uzH92mQ%40mail.gmail.com
Вложения
В списке pgsql-hackers по дате отправления: