From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | crash with sql language partition support function |
Date: | 2018-04-10 08:14:53 |
Message-ID: | 3041e853-b1dd-a0c6-ff21-7cc5633bffd0@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
Attachment | Content-Type | Size |
---|---|---|
v1-PG10-0001-Fix-a-memory-context-bug-in-RelationBuildPartitio.patch | text/plain | 1.7 KB |
v1-PG11dev-0001-Fix-a-memory-context-bug-in-RelationBuildPartitio.patch | text/plain | 912 bytes |
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Langote | 2018-04-10 08:18:01 | Re: crash with sql language partition support function |
Previous Message | Julien Rouhaud | 2018-04-10 08:08:16 | Re: pgsql: Merge catalog/pg_foo_fn.h headers back into pg_foo.h headers. |