如果INSERT进入表失败则UPDATE表

时间:2014-07-08 16:14:21

标签: sql postgresql psycopg2 upsert

我有一个问题,如果你能给出一些指示,那将是很棒的。 我正在使用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函数,但似乎很难。

0 个答案:

没有答案