복붙노트

[SQL] 합니까 포스트 그레스 지원 중첩 또는 자율 거래?

SQL

합니까 포스트 그레스 지원 중첩 또는 자율 거래?

나는 자신의 트랜잭션으로 코드의 일부를 투입해야하는 상황이있다. 나는 테이블 subtransaction_tbl을 만들었습니다 :

CREATE TABLE subtransaction_tbl
(
  entryval integer
)

그리고 언어 plpython3u에서 함수 :

CREATE FUNCTION subtransaction_nested_test_t() RETURNS void
AS $$
plpy.execute("INSERT INTO subtransaction_tbl VALUES (1)")
with plpy.subtransaction():
    plpy.execute("INSERT INTO subtransaction_tbl VALUES (2)")
$$ LANGUAGE plpython3u;

첫 번째 상황 :

BEGIN TRANSACTION;
INSERT INTO subtransaction_tbl VALUES (4);
select  subtransaction_nested_test_t();
COMMIT TRANSACTION;

테이블의 항목은 올바른 : 1,2,4

두 번째 상황 :

BEGIN TRANSACTION;
INSERT INTO subtransaction_tbl VALUES (4);
select  subtransaction_nested_test_t();
ROLLBACK TRANSACTION;

테이블의 값은 채워지지 않습니다

나는 1 또는 2 테이블 subtransaction_tbl에 추가되어야하지만, 놀랍게도 값이 삽입되지 않았다 기대했다. 나는 새로운 서브 트랜잭션 함수에 의해 연하고 부모 트랜잭션에 의존해서는 안 상상. 나는 오른쪽 또는 아니다 있으면 알려 주시기 바랍니다.

포스트 그레스에서이 자율 트랜잭션이 있습니까? 아니면 내가 내 plpython3u 기능을 수정해야합니까?

해결법

  1. ==============================

    1.SQL 프로 시저가 추가 된 포스트 그레스 (11), 전 포스트 그레스에는 자율 트랜잭션이 없습니다. 함수에 끝났다 모든 트랜잭션에 다시 롤백됩니다.

    SQL 프로 시저가 추가 된 포스트 그레스 (11), 전 포스트 그레스에는 자율 트랜잭션이 없습니다. 함수에 끝났다 모든 트랜잭션에 다시 롤백됩니다.

    여기에 기능에 대한 설명은 다음과 같습니다

    포스트 그레스 10 세 이상 해결에서 (AB-) 사용 DBLINK로 될 수있다 :

    세이브 포인트의 관련 개념이있다. (아니 같은 일!)

    plpython은 () : plpy.subtransaction와 서브 트랜잭션을 (가지고 있지만, 그 자율적 인 거래와 동일하지 않습니다. 더 COMMIT 분리가 없습니다. 그것은이하는 모든 이들 원자 만들기 위해 함께 문을 몇 번들입니다. 그 않고, 예외가 중간에 어딘가에 발생하고 그 예외를 잡을 경우,이 예외에 코드 만까지 실행됩니다. 당신은 서브 트랜잭션로 묶지 않으면 전부 또는 아무것도입니다. 이 세이브 포인트가 아닌 자율 트랜잭션을 사용하는 것과 같습니다. 문서 별 :

  2. ==============================

    2.포스트 그레스 지원 중첩 된 트랜잭션을 수행하지만 그들은 더 많은 중첩 된 부분의 포인트와의 거래와 같은 기존의 SQL 다르다.

    포스트 그레스 지원 중첩 된 트랜잭션을 수행하지만 그들은 더 많은 중첩 된 부분의 포인트와의 거래와 같은 기존의 SQL 다르다.

    당신은 항상이 최고 수준에 당신의 전형적인 BEGIN / COMMIT / ROLLBACK, 당신은 다음 명령을 사용할 필요가 중첩 수준에 :

    또한 있는지 확인해야합니다 :

    당신이 자동으로 당신을 위해 할 수있는 라이브러리를 사용하지 않는 마지막 부분은 조금 까다 롭습니다.

    내가 PG-약속을 썼을 때, 나는 확실히 그 두 규정이 보장되는했다 :

    도 참조 PostgreSQL의 중첩 된 트랜잭션의 한계를 설명 ...

  3. from https://stackoverflow.com/questions/25425944/does-postgres-support-nested-or-autonomous-transactions by cc-by-sa and MIT license