> On 22/03/2020, at 8:11 AM, Adrian Klaver <adrian.kla...@aklaver.com> wrote:
> 
>> I was thinking more about this:
>> "INSERT INTO solardatum.da_datum(ts, node_id, source_id, posted, jdata_i, 
>> jdata_a, jdata_s, jdata_t)
>>     VALUES (…) ..."
>> from your OP. Namely whether it was:
>> VALUES (), (), (), ...
>> and if so there were values in the (),(),() that duplicated each other.
>> As to the second part of your response, ON CONFLICT does one of either 
>> INSERT or UPDATE. If:
>> 1) There is no conflict for ON CONFLICT (node_id, ts, source_id) then the 
>> INSERT proceeds.
>> 2) If there is a conflict then an UPDATE occurs using the SET values.
>> Now just me working through this:
>> da_datum_pkey       = (node_id, ts, source_id)
>> da_datum_x_acc_idx  = (node_id, source_id, ts DESC, jdata_a)
>> If 1) from above applies then da_datum_x_acc_idx will not be tripped as the 
>> only way that could happen is if the node_id, ts, source_id was the same as 
>> an existing row and that can't be true because the PK over the same values 
>> passed.
> 
> Well the below is complete rot. If you are UPDATEing then you are not 
> creating a duplicate row, just overwriting a value with itself.
> 
>> If 2) from above happened then you are trying to UPDATE a row with matching 
>> PK values(node_id, ts, source_id). Now it is entirely possible that since 
>> you are not testing for constraint violation on (node_id, source_id, ts 
>> DESC, jdata_a) that you be doing SET jdata_a = EXCLUDED.jdata_a, using a 
>> value that would trip da_datum_x_acc_idx

Sorry for the vagueness in my OP, I was trying to make it easier to read. The 
VALUES are for individual single column values, so a single possible row to 
insert/update.

So what you’ve outlined is basically what I thought should be happening. 
Namely, there can be only one row that will be inserted/updated. I am wondering 
if I should re-create the da_datum_x_acc_idx index without UNIQUE? I had it as 
UNIQUE to optimise the type of queries that make use of that index… but I did a 
little bit of testing using a non-UNIQUE index and those queries appear to 
execute around the same time as with the UNIQUE index. I just wasn’t sure if 
that would just be masking some other problem in my setup.

— m@

Reply via email to