Open2

postgreSQL関連

とみとみ

Database Function内では明示的にトランザクションをはれない(postgresの仕様)

サンプル

DECLARE	
BEGIN	
    FOR i IN 0..9 LOOP
        INSERT INTO public.test (memo) VALUES (i::text);
        IF i % 2 = 0 THEN
            COMMIT;
        ELSE
            ROLLBACK;
        END IF;
    END LOOP;
    RETURN;
END;

関数実行

SELECT public.test_function();

エラーになる

ERROR:  2D000: invalid transaction termination

CONTEXT:  PL/pgSQL function test_function() line 7 at COMMIT

Note: A limit of 100 was applied to your query. If this was the cause of a syntax error, try selecting "No limit" instead and re-run the query.
とみとみ

fuctionの定義を出力する

SELECT pg_get_functiondef(oid)
FROM pg_proc
WHERE proname = 'test_function';

出力結果