Re: Transaction ISOLATION LEVEL - have I missed something?
От | Pól Ua Laoínecháin |
---|---|
Тема | Re: Transaction ISOLATION LEVEL - have I missed something? |
Дата | |
Msg-id | CAF4RT5RTZT1CX818hFdVd=jKpSorz1rMp83ObUbVGZn2wqoqqg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Transaction ISOLATION LEVEL - have I missed something? ("David G. Johnston" <david.g.johnston@gmail.com>) |
Ответы |
Re: Transaction ISOLATION LEVEL - have I missed something?
|
Список | pgsql-novice |
Hi again, >> All statements in a transaction which is READ COMMITTED sees the data >> as of CLOCK_TIMESTAMP() and all statements in a transaction that is >> SERIALIZABLE see the data as of TRANSACTION_TIMESTAMP(). > No. The isolation level is immaterial to which times are returned. I welcome being proven wrong but nothing I’ve readin that link suggests otherwise so I’m disinclined to prove it correct. (maybe I expressed myself poorly previously) I didn't say that the times returned would vary depending on the isolation level - I don't see why they would. Or, at least, that's not what I meant to say! Take this scenario. START TRANSACTION ; -- either TA (READ COMMITTED - RC) or TB (SERIALIZABLE - S) SELECT TRANSACTION_TIMESTAMP AS tt_1, CLOCK_TIMESTAMP AS ct_1; -- tt_1 and ct_1 are (almost) identical, give or take a few microseconds - i.e. the transaction start time SELECT * FROM x; -- s1 @t1 -- TA and TB perform some long-running DW query.. the actual length of time isn't important - what's important is what happens in the meantime - could be < 0.1s... -- -- In the meantime, x gets modified by a totally different transaction by a totally different user - user_x... -- SELECT TRANSACTION_TIMESTAMP AS tt_2, CLOCK_TIMESTAMP AS ct_2; -- now, there is a big difference between tt_2 and ct_2 for both TA and TB. However, tt_1 and tt_2 are identical, again for both transactions - fixed at the start of either TA or TB. SELECT * FROM x; -- s2 @t2 COMMIT; For TA (RC), the result of s1 will be the state of x at time = t1 (~ = tt_1 and ~ = ct_1) the result of s2 will be the state of x at time = ct_2 and there will be a difference due to the user_x's modfications. For TB (S), the result of s1 @t1 will be the same as the result of s2 @t2 because of SERIALIZE-ability. I hope that clears up what I meant - and also that what I have written above demonstrates a reasonable understanding of the difference between the potential outcomes of an RC transaction and an S one? Thanks again for your input - I think that putting all of that down on paper (well, screen...) has helped crystallise the concepts for me (any corrections, addenda... appreciated - any references to useful URLs in this respect likewise). Pól... > David J.
В списке pgsql-novice по дате отправления: