On Wed, Sep 20, 2017 at 4:04 PM, Robert Haas <robertmh...@gmail.com> wrote: > On Tue, Sep 19, 2017 at 11:34 PM, Amit Kapila <amit.kapil...@gmail.com> wrote: >> This point has been discussed above [1] and to avoid this problem we >> are keeping the scan always behind vacuum for unlogged and temporary >> tables as we are doing without this patch. That will ensure vacuum >> won't be able to remove the TIDs which we are going to mark as dead. >> This has been taken care in patch 0003. I understand that this is >> slightly ugly, but the other alternative (as mentioned in the email >> [1]) is much worse. > > Hmm. So if I understand correctly, you're saying that the LSN check > in patch 0001 is actually completely unnecessary if we only apply > 0001, but is needed in preparation for 0003, after which it will > really be doing something? >
Right. > In more detail, I suppose the idea is: a TID cannot be reused until a > VACUUM has intervened; VACUUM always visits every data page in the > index; we won't allow a scan to pass VACUUM (and thus possibly have > one of its TIDs get reused) except when the LSN check is actually > sufficient to guarantee no TID reuse (i.e. table is not unlogged). Right. > Page-at-a-time index vacuum as in _hash_vacuum_one_page doesn't matter > because such an operation doesn't allow TIDs to be reused. > Page-at-a-time index vacuum also allows TIDs to be reused but this is done only for already marked dead items whereas vacuum can make the non-dead entries to be removed. We don't have a problem with page-at-a-time vacuum as it won't remove any items which the scan is going to mark as dead. > Did I get it right? > I think so. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers