2012-08-23 59 views
3

我在使用SQL Alchemy的房間預訂應用程序中使用會話。到目前爲止,該應用工作正常,但是,我同時使用2個人使用它進行測試,使用不同的用戶帳戶,並且可以在同一個房間和一天中的一小時進行預留。如何用SQL Alchemy(PostgreSQL)鎖定表?

只使用一個帳戶時,這並沒有發生,我測試的房間校驗碼的很多,所以必須有一個併發問題(這兩個用戶是空的時,使用檢查和使它)。我使用PostgreSQL作爲DBMS,有沒有一種方法在提交數據庫時鎖定表,然後在完成時解鎖它?

+1

添加您的表佈局和運行查詢。目前還不清楚您的問題是否與併發或數據庫設計有關。 –

+0

如果我正確理解這一點,你有兩個查詢數據庫的進程,他們看到一個空房間,併成功保留,這被轉換爲兩個成功的INSERT(或更新?),這不應該發生。會像[一個版本計數器(http://docs.sqlalchemy.org/en/latest/orm/mapper_config.html#mapper-version-counter)或[中Postgres的配置更嚴格的事務隔離(HTTP:// WWW .postgresql.org/docs/9.1/static/transaction-iso.html)的幫助? – dtheodor

回答

2

這也正是此類案件,其中發明了這exclusion constraints。當9.2發佈時,你可以使用這些與timestamptz ranges; 9.0版本和9.1,您將需要安裝的temporalbtree_gist模塊。

欲瞭解更多信息,請參閱this blog post by the Jeff Davis,誰的想法走過來,實現了它。

+0

以上鍊接已損壞,由Jeff Davis撰寫的博客文章:http://thoughts.davisjeff.com/2010/09/25/exclusion-constraints-are-generalized-sql-unique/ – chris

+0

@norm:感謝您指出這一點。固定。 – kgrittn