zoukankan      html  css  js  c++  java
  • How to make PostgreSQL functions atomic?

    Question:

    How to make PostgreSQL functions atomic?

    Assume I have some PostgreSQL functions like the following:

    CREATE FUNCTION insertSth() RETURNS void AS $$
    BEGIN
        INSERT INTO ...;
    END;
    
    CREATE FUNCTION removeSthAfterSelect() RETURNS TABLE(...) AS $$
    BEGIN
         SELECT id INTO some_id ...;
         RETURN QUERY SELECT * FROM ...;
         DELETE FROM ... WHERE id = some_id;
    END;
    
    CREATE FUNCTION justDeleteSth() RETURNS void AS $$
    BEGIN
         DELETE FROM ...;
    END;
    
    CREATE FUNCTION justSelectSth() RETURNS TABLE(...) AS $$
    BEGIN
         RETURN SELECT * FROM ...;
    END;

    From my understanding PostgresSQL functions insertSthjustDeleteSth and justSelectSth are going to be executed atomically(?). So parallel executions of them won't mess anything up.

    But for removeSthAfterSelect if there is a parallel execution it could be that SELECT id INTO some_id .. finds something, then concurrently another transaction calls justDeleteSth and deletes the row with id = someId, so when the transaction continues it won't delete anything here: DELETE FROM ... WHERE id = some_id; meaning it messes things up.

    Is this the case? Is there a way to avoid this problem? E.g. by saying that removeSthAfterSelectshould be executed atomically?

  • 相关阅读:
    Python生成二维码
    SSO单点登录
    小说 · 凉生,我们可不可以不忧伤
    RabbitMQ入门教程——.NET客户端使用
    ASP.NET MVC 拓展ActionResult实现Html To Pdf 导出
    ASP.NET MVC 拓展ViewResult实现word文档下载
    RabbitMQ入门教程——安装及配置
    MongoDB学习笔记——分片(Sharding)
    MongoDB学习笔记——Replica Set副本集
    MongoDB学习笔记——Master/Slave主从复制
  • 原文地址:https://www.cnblogs.com/oxspirt/p/10691332.html
Copyright © 2011-2022 走看看