有没有办法在Postgres中按需生成一组完整的行?

时间:2015-05-30 04:20:57

标签: postgresql locks mutual-exclusion

基本问题是我们正在管理大量生成的行,并且只有在必要时才生成此数据一次至关重要。假设您有数据关系:

CREATE TABLE sometable (
    id SERIAL,
    refID INTEGER,
    ...
);

现在,在一些PL / PGSQL函数中,我们有:

...
-- Advisory locks didn't help here? :(
IF FALSE = SELECT EXISTS( SELECT 1 FROM sometable WHERE refID = dataID) THEN
    -- Generate fixed number of new rows in sometable that reference dataID.
END IF;
...

简而言之,应该的行多次生成多次。如上所述,PERFORM pg_advisory_lock(dataID)形式的咨询锁遗憾地无助于防止这种情况发生。有希望吗?

编辑:忘记提及我在使用pgbench进行测试时遇到了重复的数据问题。

编辑2:错误的代码修复,澄清问题。

1 个答案:

答案 0 :(得分:1)

也许最简单的解决方案就是让一个单独的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="col2"> <p class="firstparagraph">firstparagraph</p> <p class="secondparagraph">secondparagraph</p> <p class="thirdparagraph">thirdparagrap</p> <p class="fourthparagraph">fourthparagraph</p> <p class="fifthparagraph">fifthparagraph</p> <p class="sixthparagraph">sixthparagraph</p> </div>表对所讨论的id有唯一约束。您的函数可以尝试插入到该表中,如果存在异常,则该ID已经被处理。