Re: SQL design pattern for a delta trigger?
От | Erik Jones |
---|---|
Тема | Re: SQL design pattern for a delta trigger? |
Дата | |
Msg-id | CCA6508D-4514-4B52-BF24-0EA9270634DD@myemma.com обсуждение исходный текст |
Ответ на | Re: SQL design pattern for a delta trigger? (Ted Byers <r.ted.byers@rogers.com>) |
Ответы |
Re: SQL design pattern for a delta trigger?
|
Список | pgsql-general |
On Dec 10, 2007, at 4:48 PM, Ted Byers wrote: > > --- Vivek Khera <khera@kcilink.com> wrote: > >> >> On Dec 10, 2007, at 5:04 PM, Colin Wetherbee wrote: >> >>> For what it's worth, the real algorithm would be >> as follows. I >>> hadn't had enough coffee yet, and I forgot the >> UPDATE bit. >>> >>> IF >>> (a query matching your old data returns rows) >>> THEN >>> UPDATE with your new data >>> ELSE >>> INSERT your new data >> >> Still exists race condition. Your race comes from >> testing existence, >> then creating/modifying data afterwards. You need >> to make the test/ >> set atomic else you have race. >> > > Yes, but how do you do that in a stored function or > procedure or in a trigger. It would be obvious to me > if I were writing this in C++ or Java, but how do you > do it using SQL in an RDBMS? > > I saw something about table locks, but that doesn't > seem wise, WRT performance. > > The classic example of a race condition, involving a > bank account, was used in the manual to introduce the > idea of a transaction, but we can't use a transaction > in a trigger, can we? > > It is one thing to point out a race condition, but a > pointer to a solution that would work in the context > of the problem at hand would be useful and > appreciated. > > Thanks all. In a stored procedure you'd just execute the UPDATE and then check the FOUND variable to see if it found a row to update: UPDATE table_name SET foo='bar' WHERE id=5; IF NOT FOUND THEN INSERT INTO table_name (id, foo) VALUES (5, 'bar'); END IF; Erik Jones Software Developer | Emma® erik@myemma.com 800.595.4401 or 615.292.5888 615.292.0777 (fax) Emma helps organizations everywhere communicate & market in style. Visit us online at http://www.myemma.com
В списке pgsql-general по дате отправления: