How to capture and handle failed INSERT
От | Postgres User |
---|---|
Тема | How to capture and handle failed INSERT |
Дата | |
Msg-id | b88c3460703041224s15179ffcye4a8c6ecb0ee008a@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: How to capture and handle failed INSERT
|
Список | pgsql-general |
Hi, I'm using this code to increment a counter table: IF Exists (SELECT keyfld FROM counter_tbl WHERE key_fld = 'key_val') THEN UPDATE counter_tbl SET counter_fld = counter_fld + 1 WHERE key_fld = 'key_val'; ELSE INSERT INTO counter_tbl(key_fld, counter_fld) VALUES('key_val', 1); END IF; Now, I assume that it's possible for another session to INSERT a row in the microseconds that exist between the Select and Insert statements above. I also assume that I can wrap the above code in a transaction, and if the transaction fails (because another session's Insert causes my Insert to fail), then I simply need to re-execute it once. (Updates should never fail.) Does anyone have a simple example of the best way to code this type of transaction- and the best way to re-execute the same code on failure? I could use a loop but I'm not sure if that's the best solution.
В списке pgsql-general по дате отправления: