From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | Pavan Deolasee <pavan(dot)deolasee(at)gmail(dot)com>, Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>, Andres Freund <andres(at)anarazel(dot)de>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>, Peter Geoghegan <pg(at)bowt(dot)ie> |
Subject: | Re: ON CONFLICT DO UPDATE for partitioned tables |
Date: | 2018-04-17 09:00:36 |
Message-ID: | a43bd363-8d9e-b154-22bc-ece1b82c79fa@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2018/04/17 16:45, Amit Langote wrote:
> Instead of doing this, I think we should try to make
> convert_tuples_by_name_map() a bit smarter by integrating the logic in
> convert_tuples_by_name() that's used conclude if no tuple conversion is
> necessary. So, if it turns that the tuples descriptors passed to
> convert_tuples_by_name_map() contain the same number of attributes and the
> individual attributes are at the same positions, we signal to the caller
> that no conversion is necessary by returning NULL.
>
> Attached find a patch that does that.
I just confirmed my hunch that this wouldn't somehow do the right thing
when the OID system column is involved. Like this case:
create table parent (a int);
create table child () inherits (parent) with oids;
insert into parent values (1);
insert into child values (1);
analyze parent;
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.
That's because, convert_tuples_by_name() that's called by
acquire_inherited_sample_rows() gets a TupleConversionMap whose attrMap is
set to NULL. do_convert_tuple() may then try to access a member of such
NULL attrMap. In this case, even if parent and child tables have same
user attributes, patched convert_tuples_by_name_map would return NULL, but
since their hasoids setting doesn't match, a TupleConversionMap is still
returned but has its attrMap set to NULL. To fix that, I taught
do_convert_tuple() to ignore the map if NULL. Also, free_conversion_map()
shouldn't try to free attrMap if it's NULL.
Attached updated patch.
Thanks,
Amit
Attachment | Content-Type | Size |
---|---|---|
v2-0001-Optimize-convert_tuples_by_name_map-usage-a-bit.patch | text/plain | 21.8 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | PG Bug reporting form | 2018-04-17 09:40:50 | BUG #15160: planner overestimates number of rows in join when there are more than 200 rows coming from CTE |
Previous Message | Emre Hasegeli | 2018-04-17 08:55:22 | Re: Standby corruption after master is restarted |