Re: BUG #16561: timestamp with time zone microseconds inconsistently recorded correctly and incorrectly

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #16561: timestamp with time zone microseconds inconsistently recorded correctly and incorrectly
Дата
Msg-id 1344467.1596068462@sss.pgh.pa.us
обсуждение исходный текст
Ответ на BUG #16561: timestamp with time zone microseconds inconsistently recorded correctly and incorrectly  (PG Bug reporting form <noreply@postgresql.org>)
Ответы Re: BUG #16561: timestamp with time zone microseconds inconsistently recorded correctly and incorrectly  (Peter Thomas <peter.thomas@mccarthy.co.nz>)
Список pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> writes:
> One field being updated is a timestamp provided as UTC text representation
> (e.g. '2020-07-29T22:30:00.124248Z')  but stored as timestamp with time
> zone. The timestamp sub-second component is not consistently written -
> sometimes it is stored correctly, sometime it is stored incorrectly. Always
> the sub second part of the time (including more significant digits) and
> never the date/time from seconds upwards.

Given the described query:

> UPDATE "tnt_res_b195217c_cfc8_11ea_8c1b_00155dce25bc".job 
> SET 
> locked_tz = CASE WHEN locked_tz IS NULL THEN '2020-07-29T22:30:00.124248Z'
> ELSE locked_tz END, 
> locked_by_operative_uid = CASE WHEN locked_by_operative_uid IS NULL THEN
> 'b32ffd2c-cfc8-11ea-987d-00155dce25bc' ELSE locked_by_operative_uid END, 
> version = CASE WHEN locked_tz IS NULL THEN version + 1 ELSE version END,
> description='2020-07-29T22:30:00.124248Z' -- added for debugging
> WHERE uid = '09dbe5d6-d1eb-11ea-9185-00155dce25bc' 
> RETURNING locked_tz, locked_by_operative_uid;

what seems far more likely than random data corruption is that some other
transaction updated this same row slightly earlier, setting the locked_tz
value that you are reading back.  The CASE in this query would then have
preserved that value, but the description field would get updated anyway.

In the specific example you show, if I'm not confused, the reported
locked_tz value is a bit older than the description value, so that
this sequence of events seems very plausible.  But even if the order
were reversed, that wouldn't immediately destroy this theory, because
you haven't said where the timestamps are coming from.  The transaction
that got to the row first could possibly try to store a "newer" timestamp
than the one that got there second, unless there's some guarantee about
how those timestamps are computed that you've not described.

In short, I think you need to take a hard look at whatever logic you
think is preventing concurrent selection of the same job row by multiple
transactions, because what it looks like from here is that that's not
working reliably.

I won't completely deny that there could be a Postgres bug here, but
there are enough moving parts that are missing from this bug report
that it can't be investigated usefully.

            regards, tom lane



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

Предыдущее
От: PG Bug reporting form
Дата:
Сообщение: BUG #16561: timestamp with time zone microseconds inconsistently recorded correctly and incorrectly
Следующее
От: Peter Thomas
Дата:
Сообщение: Re: BUG #16561: timestamp with time zone microseconds inconsistently recorded correctly and incorrectly