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 Q&A 7171 게시물 읽기
No. 7171
RULE로 정의된 구문 인서트시 SERIAL로 정의된 필드가 2씩증가..
작성자
아남이(아남이)
작성일
2007-07-02 16:04
조회수
4,658

아래는 테이블 A에 정의된 룰입니다.

--------------------------------------------------------------------------------------------

CREATE OR REPLACE RULE tb_a_insert AS

    ON INSERT TO tb_a DO  INSERT INTO tb_b (uno,mid....)

  VALUES (new."no" - 1, new.mid....);

--------------------------------------------------------------------------------------------

문제는... tb_a 테이블에 no라는 필드가 serial로 정의되어 있는데..

tb_b 테이블에 rule로 인서트시...no값이 제대로 불러지지 않는 문제가 발생하네요..

현재 "new.no-1"이라고 해둔 이유는... 아래와 같습니다.

1. new.no-1 이 아닌 new.no라고 할경우... tb_a의 마지막 serial값이 8인경우 tb_a에 10이라는 no값이 인서트가 되며.. tb_b에는 9라는 값이 인서트 됩니다.

2. 이런 문제로 new.no-1로 하였는데.. 1번과 마찬가지로 tb_a의 serial값이 no가 2씩 증가되어 들어가더군요..

3. tb_a에서 no는 pk이며... tb_b에서는 tb_a의 pk값을 저장하기 위한 필드로 rno를 정의해 둔 상태이며.. 위의 룰에서는 안나와 있지만..tb_b에서는 uno라는 필드로 serial이 따로 존재합니다.


왜 2씩 증가가 되는걸까요? ㅜㅜ 이번에 rule을 처음 사용해보는데... 

이런 문제를 다룬 분들은 안계신듯하네요..

메뉴얼에도 없고..

뭔가 잘못 정의된 부분이 있는건가요? 도움 부탁드려요 ^^


이 글에 대한 댓글이 총 1건 있습니다.

RULE이 걸려있는 뷰나 테이블에 넣으실 때는

nextval('시퀀스') 사용을 삼가하시면 됩니다~

미리 어플쪽에서 nextval 값을 구한 후에 넣어주시면 됩니다

nextval('시퀀스') 자체가 전달되어서 두번 호출되기 때문에 2씩 증가합니다

신기배(소타)님이 2007-07-04 18:57에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7174[질문] 특정 DB를 다른 파티션에 설정 할 수가 있나요? [2]
유명근
2007-07-12
5334
7173[질문]dblink사용시 인코딩 관련 에러입니다. [1]
최재원
2007-07-09
5032
7172부끄러운질문 : FOREIGN KEY 삭제..와 추가질문하나더.
문근형
2007-07-04
4497
7171RULE로 정의된 구문 인서트시 SERIAL로 정의된 필드가 2씩증가.. [1]
아남이
2007-07-02
4658
7170Apache서버+php+postgreSQL 을 쓰고 있는데 회원가입이 잘안되요 [1]
이현규
2007-06-30
4972
7169저장프로시저를 쓰려고 하는데. 안먹히네요 버전 문제인지.. [1]
김대헌
2007-06-26
4725
7168트랜젝션 측정시 테스트 결과 궁금한 점.. [2]
윤일
2007-06-25
4688
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다