आप उस क्रम से last_value का चयन कर सकते हैं, जो आपके द्वारा धारावाहिक प्रकार का उपयोग करने पर स्वचालित रूप से बन जाता है:
create table test (
id serial primary key,
parent integer not null,
foreign key (parent) references test(id)
);
insert into test values(default, (select last_value from test_id_seq));
insert into test values(default, (select last_value from test_id_seq));
insert into test values(default, (select last_value from test_id_seq));
select * from test;
id | parent
----+--------
1 | 1
2 | 2
3 | 3
(3 rows)
और निम्नलिखित और भी आसान काम करने लगते हैं:
insert into test values(default, lastval());
हालांकि मुझे नहीं पता कि यह कई अनुक्रमों का उपयोग करते समय कैसे काम करेगा... मैंने इसे देखा; lastval() किसी भी क्रम में अंतिम मान लौटाता है या अंतिम अगली या सेटवल कॉल के साथ सेट करता है, इसलिए निम्नलिखित आपको परेशानी में डाल देगा:
create table test (
id serial primary key,
foo serial not null,
parent integer not null,
foreign key (parent) references test(id)
);
select setval('test_foo_seq', 100);
insert into test values(default, default, lastval());
ERROR: insert or update on table "test" violates foreign key constraint "test_parent_fkey"
DETAIL: Key (parent)=(101) is not present in table "test".
हालांकि निम्नलिखित ठीक रहेगा:
insert into test values(default, default, currval('test_id_seq'));
select * from test;
id | foo | parent
----+-----+--------
2 | 102 | 2
(1 row)