Search Postgresql Archives

Re: table as log (multiple writers and readers)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Craig Ringer wrote:
brian wrote:

Use a timestamp column also.

That's subject to the same issues, because a transaction's current_timestamp() is determined at transaction start. So, in a situation like this:


WRITER 1    WRITER 2    READER 1
--------------------------------------------
BEGIN
            BEGIN
INSERT
            INSERT
            COMMIT
                        BEGIN
                        SELECT
COMMIT

then READER 1 will see the most recent timestamp as that inserted by WRITER 2, but it won't see the row inserted by WRITER 1 with an earlier timestamp.

I don't think it's even OK in the case of a single-statement INSERT (where the transaction is implicit) and/or with the use of clock_timestamp() ... though I'm less sure about that.


I don't mean to rely on *only* the timestamp, but for the reader to remember both the last ID and the timestamp for that particular transaction. When the next read occurs it should check to see if there's an earlier timestamp with a higher ID than that remembered. The database "knows" that WRITER 1 was there first. If it's important to the application then the reader will need to take some action to re-order things based on what it has already read, which it could do if it if it compared timestamps and ID order. It needn't keep the complete set of IDs in memory.

Wait--would WRITER 1 have the higher ID?


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux