我有一个问题,如果你能给出一些指示,那将是很棒的。 我正在使用PostgreSQL
表:
mytable(col1,col2,col3,count)
unique constraints on col1,col2,col3
我有一个插入语句,称之为
insert into myTable
它有时会失败,因为插入违反了唯一约束 但是我想抓住这个错误并在有unique_violation时进行更新,即
update myTable
set count=count+1
where col1=.. and col2=.. and col3=..
如何用Postgresql的语言准确表达这种语义?
我试过(似乎语法错误):
BEGIN;
INSERT INTO knowledge (brand_id, brand, user_variant,score,count)
VALUES (%(brand_id)s, %(brand)s, %(user_variant)s,%(score)s,%(count)s);
EXCEPTION
WHEN unique_violation THEN
UPDATE knowledge
SET count=count+1
WHERE brand=%(brand)s AND user_variant=%(user_variant)s;
COMMIT;
还有python(我正在使用python,使用psycopg2)
try:
...
except:
...
哪个不起作用,因为try只是将插入错误传递给最终导致错误的异常:
current transaction is aborted, commands ignored until end of transaction block
除了sql in except之外完全正确。
我现在正在尝试使用pl / pgsql函数,但似乎很难。