приходят внешние данные с уникальным ID (uuid)
нужно эту запись либо создать, либо проапдейтить новыми значениями
делал так:
dbh->begin_work; # начали транзакцию
my $record = dbh->single( # попытка апдейта
q{
UPDATE
table
SET
some=?
WHERE
eid=?
RETURNING *
}, $val, $eid
);
unless ($record) { # инсерт после неудачи апдейта
my $record = dbh->single(
q{
INSERT INTO
table
(eid, some)
VALUES
(?, ?)
RETURNING *
}, $eid, $val
);
}
dbh->commit; # коммит транзакции
то есть в транзакции пытаемся сперва сделать апдейт имеющегося, а если
его нет в БД то затем делаем insert.
так вот при таком подходе при приходе одновременных запросов иногда
падает на втором insert'е с жалобой что такой ключ уже существует.
как правильно решить данную проблему?
--
. ''`. Dmitry E. Oboukhov
: :’ : email: unera@debian.org jabber://UNera@uvw.ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537