2017-05-08 2 views
1

스테이징 테이블에서 데이터를 테이블에 삽입하려고하지만 오류가 발생하면 데이터를 변경하지 않습니다.Postgres에서 트랜잭션을 롤백하는 좋은 방법은 무엇입니까

내가해야하는 작업 행복 경로 경우

  Begin transaction; 
      DELETE FROM mytable; 
      INSERT INTO mytable SELECT * FROM mytable_staging ; 
      Commit transaction; 

삽입 문은 내가 트랜잭션을 롤백 할 수있는 방법 실패를 무엇입니까?

Begin transaction; 
DELETE FROM mytable; 
INSERT INTO mytable SELECT * FROM mytable_staging ; 
Rollback transaction; 

모든 SQL 명령은 대소 문자를 구분 및 명령문의 transaction 부분은 선택 사항이지만, 나는 명확성을 위해 그것을 포함하려면 :

+1

어느 쪽입니까? Redshift 또는 Postgres? 하지만 일반적으로 '롤백'을 사용하는 트랜잭션을 롤백하려면 –

+0

아마존 레드 쉬프트입니다. –

답변

1

PostgreSQL 트랜잭션은 자동으로 오류 롤백됩니다 (this 참조).

자성는 - 작업 단위 내에서 모든 작업이 이 성공적으로 완료되도록합니다; 그렇지 않으면 트랜잭션이 지점에서 중단되고 이전 작업은 이전 상태 인 으로 롤백됩니다.

일관성 - 성공적으로 커밋 된 트랜잭션이 발생할 때 데이터베이스의 상태가 올바르게 변경되도록합니다.

격리 - 트랜잭션이 서로 투명하고 이 투명하게 작동합니다.

내구성 - 커밋 된 트랜잭션의 결과 또는 결과가 시스템 오류가 발생해도 계속 유지되도록합니다.

관련 문제