## 개요 - 현재 트랜잭션 내에서 롤백할 수 있는 지점을 만드는 명령어이다. - `SAVEPOINT [savepoint]`로 savepoint를 만들고, `ROLLBACK TO SAVEPOINT [savepoint]`로 해당 savepoint로 롤백할 수 있다. - 같은 savepoint 이름을 사용할 때는 `SAVEPOINT RELEASE [savepoint]`로 정교하게 사용할 수 있다. ## 예시 ```sql -- 1, 3은 삽입하고 2는 삽입하지 않는다. BEGIN; INSERT INTO table1 VALUE(1); SAVEPOINT point; INSERT INTO table1 VALUE(2); ROLLBACK TO SAVEPOINT point; INSERT INTO table1 VALUES (3); COMMIT; ``` ```sql -- 1, 3은 삽입하고 2는 삽입하지 않는다. BEGIN; INSERT INTO table1 VALUE(1); SAVEPOINT point; INSERT INTO table1 VALUE(2); SAVEPOINT point; INSERT INTO table1 VALUES (3); ROLLBACK TO SAVEPOINT point; SELECT * FROM table1; -- 1, 2만 출력된다. RELEASE SAVEPOINT point; ROLLBACK TO SAVEPOINT point; SELECT * FROM table1; -- 1만 출력된다. COMMIT; ``` ## 참고 - https://runebook.dev/ko/docs/postgresql/sql-savepoint #db #postgresql