On Fri, 2010-07-16 at 23:03 +0200, Andres Freund wrote: > Sure its not that bad, but at least it needs to get documented imho. > Likely others should chime in here ;-)
Don't understand you. This is a clear bug in join removal, test case attached, a minor rework of your original test case. > What could the join removal path (and similar places) *possibly* do > against such a case? Without stopping to use SnapshotNow I dont see > any way :-( The bug is caused by allowing join removal to work in serializable transactions. The fix for 9.0 is easy and clear: disallow join removal when planning a query as the second or subsequent query in a serializable transaction. A wider fix might be worth doing for 9.1, not sure. -- Simon Riggs www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Training and Services
CREATE TABLE testsnap(t int); CREATE TABLE testsnap2 (); INSERT INTO testsnap VALUES(1),(1); T1: BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; SELECT count(*) FROM testsnap2; -- serializable snapshot is frozen T2: DELETE FROM testsnap; ALTER TABLE testsnap ADD CONSTRAINT t unique(t); T1: SELECT count(*) FROM testsnap; SELECT t1.* FROM testsnap t1 LEFT JOIN testsnap t2 USING(t); explain analyze SELECT t1.* FROM testsnap t1 LEFT JOIN testsnap t2 USING(t);
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers