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를 하시던 방법을 사용하는 방법이 있습니다.