Postgres groovy:尝试仅在不存在的情况下插入行

时间:2013-10-09 00:59:13

标签: sql postgresql groovy

我试图在我的表中插入一行,只要它不存在(基于唯一的id(myId))。我不希望在插入之前查询每一行,因为这需要一些时间。我想尝试插入,如果失败则没问题。有没有办法做到这一点?

目前,我正在做:

    try {
        sqlObj.executeInsert(query)
    }
    catch (Exception e) {
        println "Sql Exception"
    }

但这有点慢,因为在某些情况下几乎每一行都会引发异常。有没有办法在SQL / Groovy / Postgresql中处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

SQL中的merge statement允许您为行存在或不存在时指定备用逻辑。你可以这样写:

MERGE INTO tablename USING table_reference ON (condition)
   WHEN NOT MATCHED THEN
   INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...

(这是维基百科示例,其中“匹配时”部分已删除。

选择检查密钥是否存在需要很长时间,这有点令人不安。您是否使用select *语句而不是循环遍历Java中的所有行?另外,id字段是否有索引?如果没有索引,则合并语句将遇到与性能相关的问题。