Hi everyone, I am running 'PostgreSQL 9.1.4, compiled by Visual C++ build 1500, 64-bit' on a Windows Server and I am having some Locking issues. Maybe anyone can let me know what is wrong with my example:
Imagine that we have two tables (t_users and t_records) t_users contains 1 row per each user t_records is a regular transactional table which contains a field userid with the user that created/updated the row. CREATE TABLE t_users(userid VARCHAR(10), loginattempts INTEGER, CONSTRAINT pk_t_users PRIMARY KEY (userid)); CREATE TABLE t_records(recordid INTEGER, description VARCHAR(100), userid VARCHAR(10) REFERENCES t_users(userid) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION); INSERT INTO t_users (userid, loginattempts) VALUES ('andrew',0); The user logs in and starts a background process that contains a long TRANSACTION which updates/inserts rows in t_records with the user's id. This process keeps the transaction open for 1 hour while it works with code like: /* Session #1 */ BEGIN TRANSACTION /* Big loop */ INSERT INTO t_records (recordid, description, userid) VALUES (1,'Record #1','andrew'); /*… SOME CODE HERE */ /*.... */ /* Once the loop ends, it will COMMIT/ROLLBACK the transaction */ ROLLBACK / COMMIT /* END of Session #1 */ The user logs out and then tries to log back in after 30 minutes. The login hangs because we are not be able to update records on t_user (for userids used on Session#1 ) until the transaction on Session#1 is done: /* SESSION #2 */ UPDATE t_users SET loginattempts = 1 WHERE userid = 'andrew' /*END SESSION #2*/ Any comments or feedback will be appreciated. Regards, Andrew Jaimes