본문 바로가기
DB/RDBMS

[PostgreSQL] 트랜잭션 사용하기

by 소라둥이 2020. 4. 29.

PostgreSQL에서 트랜잭션 작업 시 해당 작업 앞뒤로 BEGIN과 COMMIT을 사용하면 된다.

 

ex)

BEGIN;

   SELECT * FROM TBL_MEMBER;

   DELETE FROM TBL_MEMBER WHERE 1=1;

COMMIT;

 

BEGIN과 COMMIT 사이의 영역을 트랜잭션 블록이라 부름.

필요시 ROLLBACK TO [원하는 지점] 으로 ROLLBACK도 가능하다.

 

ex)

MEMBER 테이블의 id가 user123인 컬럼을 지우려고한다.

실수로 전부 다 지워서 다시 세이브포인트로 롤백한 후 이후 남은 작업을 진행한다.

 

BEGIN;

   SELECT * FROM TBL_MEMBER;

   SAVEPOINT my_savepoint;  ----------------------- 3번

   DELETE FROM TBL_MEMBER WHERE 1=1;     ------------------- 1번

   ROLLBACK TO my_savepoint;            ------------------- 2번

   DELETE FROM TBL_MEMBER WHERE id = 'user123';

COMMIT;

 

 

1번 DELETE 쿼리에 의해 MEMBER 테이블의 모든 데이터는 지워진다.

2번 ROLLBACK TO 로 인해 3번 상태로 되돌려 진다. 즉 1번 쿼리 실행 전으로 돌아간다.

SAVEPOINT와 ROLLBACK사이의 작업은 이미 한번 실행했기에 건너뛰고 이후 작업을 진행한다.

위의 예제에서는 마지막 남은 user123 delete 작업만 진행하게된다.

 

 

트랜잭션에 대한 자세한 설명은 PostgreSQL 공식문서에 한글로 자세히 나와있으니 참고하면된다.

https://postgresql.kr/docs/9.5/tutorial-transactions.html

 

트랜잭션

트랜잭션 transaction 이란 모든 데이터베이스 시스템에서 기본적인 한 개념입니다. 트랜잭션의 핵심은 여러개의 작업이 최종적으로는 하나로 취급된다는 것입니다. 이것을 전부 적용 아니면 전부 취소 작업(all-or-nothing operation)이라고 부릅니다. 각각의 트랜잭션은 독립적이여서 동시에 발생한 트랜잭션에 대해서는 그 트랜잭션 안에서의 데이터만 적용됩니다. 또, 하나의 트랜잭션 안에서 어떤 작업 도중 오류가 발생 되었다면, 이전에 적용되었

postgresql.kr