PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgresql में स्व-संदर्भित रिकॉर्ड सम्मिलित करना

आप उस क्रम से 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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक प्रोग्राम को डिबग करना जो gdb . के साथ SIGINT का उपयोग करता है

  2. एकाधिक पंक्तियों को सम्मिलित करते समय डुप्लिकेट के साथ क्या होता है?

  3. त्रुटि:PostgreSQL में स्कीमा बनाते समय भूमिका का सदस्य होना चाहिए

  4. बड़ी मात्रा में प्रश्नों के साथ नोड-पोस्टग्रेज

  5. datetime_select . के साथ मल्टीपैरामीटर त्रुटि