[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.SQL 프로 시저가 추가 된 포스트 그레스 (11), 전 포스트 그레스에는 자율 트랜잭션이 없습니다. 함수에 끝났다 모든 트랜잭션에 다시 롤백됩니다.
SQL 프로 시저가 추가 된 포스트 그레스 (11), 전 포스트 그레스에는 자율 트랜잭션이 없습니다. 함수에 끝났다 모든 트랜잭션에 다시 롤백됩니다.
여기에 기능에 대한 설명은 다음과 같습니다
포스트 그레스 10 세 이상 해결에서 (AB-) 사용 DBLINK로 될 수있다 :
세이브 포인트의 관련 개념이있다. (아니 같은 일!)
plpython은 () : plpy.subtransaction와 서브 트랜잭션을 (가지고 있지만, 그 자율적 인 거래와 동일하지 않습니다. 더 COMMIT 분리가 없습니다. 그것은이하는 모든 이들 원자 만들기 위해 함께 문을 몇 번들입니다. 그 않고, 예외가 중간에 어딘가에 발생하고 그 예외를 잡을 경우,이 예외에 코드 만까지 실행됩니다. 당신은 서브 트랜잭션로 묶지 않으면 전부 또는 아무것도입니다. 이 세이브 포인트가 아닌 자율 트랜잭션을 사용하는 것과 같습니다. 문서 별 :
-
==============================
2.포스트 그레스 지원 중첩 된 트랜잭션을 수행하지만 그들은 더 많은 중첩 된 부분의 포인트와의 거래와 같은 기존의 SQL 다르다.
포스트 그레스 지원 중첩 된 트랜잭션을 수행하지만 그들은 더 많은 중첩 된 부분의 포인트와의 거래와 같은 기존의 SQL 다르다.
당신은 항상이 최고 수준에 당신의 전형적인 BEGIN / COMMIT / ROLLBACK, 당신은 다음 명령을 사용할 필요가 중첩 수준에 :
또한 있는지 확인해야합니다 :
당신이 자동으로 당신을 위해 할 수있는 라이브러리를 사용하지 않는 마지막 부분은 조금 까다 롭습니다.
내가 PG-약속을 썼을 때, 나는 확실히 그 두 규정이 보장되는했다 :
도 참조 PostgreSQL의 중첩 된 트랜잭션의 한계를 설명 ...
from https://stackoverflow.com/questions/25425944/does-postgres-support-nested-or-autonomous-transactions by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 선택 카운트 (ID) 또는 존재 (...) : 항목의 존재 여부가 있는지 확인하는 가장은 무엇입니까? (0) | 2020.04.21 |
---|---|
[SQL] 어떻게 ASP.NET 응용 프로그램에서 SQL 주입 공격을 피할 수있다? (0) | 2020.04.21 |
[SQL] 왜 Access에서 LIKE 쿼리는 레코드를 반환하지 않는 이유는 무엇입니까? (0) | 2020.04.21 |
[SQL] 어떻게 .. SQL 서버에서 전역 변수를 선언하려면? (0) | 2020.04.21 |
[SQL] 쉼표 데이터베이스 필드에 값을 구분 (0) | 2020.04.21 |