## 개요
- 현재 트랜잭션 내에서 롤백할 수 있는 지점을 만드는 명령어이다.
- `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