Tsirkin Evgeny wrote: > one moer question ,how did you tested it? > > > I have tested this here. I don't really know if this is just the case with > > Best Regards, > > Michael Paesold First I created the your schedule table. Then I opened two psql sessions... Session A Session B BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; DELETE FROM schedule WHERE studentid = 1; INSERT INTO schedule VALUES (1, 1, 0, 0); BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; DELETE FROM schedule WHERE studentid = 1; -- if there existed records for this delete, -- session B will now wait for session A to -- commit/rollback and error out on commit; -- otherwise no error COMMIT; INSERT INTO schedule VALUES (1, 1, 0, 0); COMMIT; You can also try and rollback the first transaction etc. Again, what really helps is: ALTER TABLE schedule ADD CONSTRAINT uniq_schedule UNIQUE (studentid, groupid); Best Regards, Michael Paesold