On Fri, Jul 13, 2007 at 01:05:01PM +0100, Ed W wrote: > Also "locking" is usually a pain. Much better to go for "optimistic > locking" which means that two uses are allowed to have a go at updating > or printing something, but one of them wins and the other gets returned > an error. There are no locks to prevent either of them trying right up > to the point one of the transactions fails. This simplifies the > interface by not needing an unlock interface for cases of lost sessions > (my CC payment processor does this - you can get locked out of the > system for 15 mins if you press links in the wrong order and hence loose > your session, but the system still thinks you are logged in - grrr)
Agreed. In the past, I've used a last_modified field to both track the last time a record was updated as well as provide optimistic locking. What I'd do is put a BEFORE UPDATE trigger on the table that would compare NEW.last_updated to OLD.last_updated; if they were the same it would allow the update. In the application you then need to ensure that you grab last_updated when you pull data for display, and that you include that in your UPDATE when you save changes; if someone else had made a change in the meantime, last_updated would then be different and the trigger would throw an error. In PostgreSQL, you could probably use xmin in a similar fashion if you didn't want to add a last_modified field. -- Decibel!, aka Jim C. Nasby, Database Architect [EMAIL PROTECTED] Give your computer some brain candy! www.distributed.net Team #1828
pgpPwe1PDuf31.pgp
Description: PGP signature
------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/
_______________________________________________ Ledger-smb-devel mailing list Ledger-smb-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ledger-smb-devel