database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 5831 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5831
PostgreSQL 8 : SavePoint - 간단정리
작성자
조성준(openphp)
작성일
2005-01-25 21:24ⓒ
2005-01-30 20:12ⓜ
조회수
9,503

홈페이지 : http://www.openphp.com , http://www.openpython.com

 

안녕 하세요? 조성준 입니다. 

PostgreSQL 8부터 생겨난 기능중 savepoint 기능에 대해 설명 하겠습니다.

 

- Save Point -

 

Save Point 라는 것은 단어에서도 느껴지듯이 Save ,Point 즉 어떤 지점을 저장또는 지정해놓는 역활을 합니다.

트랜잭션 처리중에 save point를 찍어 두었다가 rollback to 명령으로 Undo하는 기능을 가지고 있습니다.

기능의 폭이 넓지 않은 한정적이지만 유용하게 쓰일때가 생기긴합니다. 다음의 예제를 통해 이해하시기 바랍니다.

 

* 정상처리 *

 

     

    pgbench=# create table savepoint_test ( a varchar(255),b bigint );

    CREATE TABLE

    pgbench=# insert into savepoint_test values('test',1);

    INSERT 837035 1

    pgbench=# select * from savepoint_test;

    a | b

    ------+---

    test | 1

    (1 row)

     

    pgbench=# begin work;

    BEGIN

    pgbench=# update savepoint_test set a = 'savepoint';

    UPDATE 1

    pgbench=# savepoint b_field_update;

    SAVEPOINT

    pgbench=# update savepoint_test set b = 2;

    UPDATE 1

    pgbench=# rollback to b_field_update;

    ROLLBACK

    pgbench=# commit;

    COMMIT

    pgbench=# select * from savepoint_test;

    a | b

    -----------+---

    savepoint | 1

    (1 row)

     

 

 

위처럼 먼저 트랜잭션 표시후 a 필드를 변경하고 , 다음 b 필드 변경전 savepoint 를 찍어 준후에

rollback을 했습니다.

만약에 이런경우를 가정한다면 어떤 정보변경이나 업무처리하고 있고 그걸 어떠한 테이블에 합계정보를 넣거나하는 작업시에

트랜잭션 동안 어떤한 검증절차를 통해 최종 컨펌을 내려야 한다면 그럴때 유용합니다. 비유가 적절할지.

 

다음은 불가능한 방법입니다.

 

* 처리 되지 않음 *

 

     

    pgbench=# select * from savepoint_test;

    a | b

    -----------+---

    savepoint | 1

    (1 row)

     

    pgbench=# begin;

    BEGIN

    pgbench=# savepoint a_field_test;

    SAVEPOINT

    pgbench=# update savepoint_test set a = 'savepoint-test2';

    UPDATE 1

    pgbench=# savepoint b_field_test;

    SAVEPOINT

    pgbench=# update savepoint_test set b = 2;

    UPDATE 1

    pgbench=# rollback to a_field_test;

    ROLLBACK

    pgbench=# commit;

    COMMIT

    pgbench=# select * from savepoint_test;

    a | b

    -----------+---

    savepoint | 1

    (1 row)

 

위와 같은 문법으로 처리는 불가능 합니다. 왠지 될듯한 문법이 지원이 않되기에 save point의 활용도가 다소 떨어지기는하지만

충분히 이용가치는 있습니다. 약간의 블럭을 지정하여 선택적인 롤백이나 Commit이 되었으면도 하는데

앞으로 두고봐야 할듯 싶습니다.

[Top]
No.
제목
작성자
작성일
조회
5834PostgreSQL 8 : PostgreSQL.conf 설정하기 [2]
조성준
2005-01-25
19584
5833PostgreSQL 8 : PITR [2]
조성준
2005-01-25
10061
5832PostgreSQL 8 : TableSapce
조성준
2005-01-25
15710
5831PostgreSQL 8 : SavePoint - 간단정리
조성준
2005-01-25
9503
5830PostgreSQL DB Connect Poll : pgpool - 설정과가동
조성준
2005-01-25
11887
5829PostgreSQL DB Connect Pool : pgpool - 기본
조성준
2005-01-25
15321
57668.0에서 바뀌는 postgresql.conf 설정값들
김상기
2004-12-27
9880
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.053초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다