설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 187건, 최근 0 건
   

[초보질문] FK 로 지정된 field에 insert할때

글쓴이 : droiyan 날짜 : 2016-05-19 (목) 14:49 조회 : 5693
안녕하세요,
Postgresql과 씨름하고 있는 1인입니다.

A테이블에는 'seq' field가 PK로 지정되어 있고
B테이블에는 'seq' field가 FK로 지정되어 있습니다.

B테이블에 insert할때 currval('seq') 이렇게 하면 seq가 not yet defined 되었다고 에러 메세지가
나오는데요.. 어떻게 써야 하는지요.. ?

알려주시는 분들께 미리 감사드립니다.

초보 올림

주킹 2016-05-19 (목) 15:51
create table test_k ( seq serial primary key , b varchar);
CREATE TABLE test_r  ( a int, seq int REFERENCES test_k(seq));


insert into test_k values (nextval('test_k_seq_seq'),'king');
insert into test_k values (nextval('test_k_seq_seq'),'king');
insert into test_k values (nextval('test_k_seq_seq'),'king');
insert into test_k values (nextval('test_k_seq_seq'),'king');
insert into test_k values (nextval('test_k_seq_seq'),'king');
postgres=# select * from test_k;
 seq |  b 
-----+------
  1 | king
  2 | king
  3 | king
  4 | king
  5 | king


  insert into test_r values (1,currval('test_k_seq_seq'));

  postgres=#    insert into test_r values (1,currval('test_k_seq_seq'));
  postgres=# select * from test_r;
 a | seq
---+-----
 1 |  5

 exit (세션 out 후 재접속)

 insert into test_r values (2,nextval('test_k_seq_seq'));

 ERROR:  currval of sequence "test_k_seq_seq" is not yet defined in this session

이와 같이 나온다는 말씀인 것 같은데 postgrseql은 세션에서 nextval을 사용하지 않는다면 currval을 사용할 수가 없습니다.

정확히 어떤 것을 원하시는 지 모르지만 trigger를 사용하여 insert를 하시던 방법을 사용하는 방법이 있습니다.
댓글주소
   

postgresdba.com