On Mon, 2011-01-03 at 15:12 +0200, Heikki Linnakangas wrote:
> This patch has never tried to implement concurrency-safe upsert. It
> implements the MERGE command as specified by the SQL standard, nothing
> more, nothing less. Let's not move the goalposts. Googling around, at
> least MS SQL Server's MERGE command is the same
> (http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx).
> There is nothing embarrassing about it, we just have to document it clearly.
That article says that SQLServer supplies a locking hint that completely
removes the issue. Because they use locking, they are able to update in
place, so there is no need for them to use snapshots.
Our version won't allow a workaround yet, just for the record.
-- Simon Riggs http://www.2ndQuadrant.com/books/PostgreSQL Development, 24x7 Support, Training and Services