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

Posgtres बैच डालने से कई सीरियल मान लौटाना

आप RETURNING . का उपयोग कर सकते हैं कई मानों के साथ:

psql=> create table t (id serial not null, x varchar not null);
psql=> insert into t (x) values ('a'),('b'),('c') returning id;
 id 
----
  1
  2
  3
(3 rows)

तो आप कुछ और इस तरह चाहते हैं:

INSERT INTO AutoKeyEntity (Name,Description,EntityKey) VALUES
('AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a','Testing 5/4/2011 8:59:43 AM',DEFAULT)
returning EntityKey;
INSERT INTO AutoKeyEntityListed (EntityKey,Listed,ItemIndex) VALUES
(CURRVAL('autokeyentity_entityKey_seq'),'Test 1 AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a', 0),
(CURRVAL('autokeyentity_entityKey_seq'),'Test 2 AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a', 1),
(CURRVAL('autokeyentity_entityKey_seq'),'Test 3 AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a', 2)
returning EntityKey;
-- etc.

और फिर आपको लौटा हुआ EntityKey . इकट्ठा करना होगा आपके लेन-देन में प्रत्येक कथन से मूल्य।

आप लेन-देन की शुरुआत और अंत में अनुक्रम के वर्तमान मूल्य को पकड़ने की कोशिश कर सकते हैं और उनका उपयोग यह पता लगाने के लिए कर सकते हैं कि कौन से अनुक्रम मानों का उपयोग किया गया था लेकिन जो विश्वसनीय नहीं है :

इसलिए, भले ही आपके अनुक्रमों में कैश हो आपके लेन-देन में आपके पास अभी भी गैर-सन्निहित अनुक्रम मान हो सकते हैं। हालांकि, यदि अनुक्रम का कैश . है तो आप सुरक्षित हो सकते हैं मान आपके लेन-देन में INSERT की संख्या से मेल खाता है, लेकिन मुझे लगता है कि यह समझ में आने के लिए बहुत बड़ा होगा।

अपडेट करें :मैंने अभी देखा (प्रश्नकर्ता की टिप्पणियों के लिए धन्यवाद) कि इसमें दो टेबल शामिल हैं, टेक्स्ट की दीवार में थोड़ा सा खो गया है।

उस स्थिति में, आपको वर्तमान INSERTS का उपयोग करने में सक्षम होना चाहिए:

INSERT INTO AutoKeyEntity (Name,Description,EntityKey) VALUES
('AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a','Testing 5/4/2011 8:59:43 AM',DEFAULT)
returning EntityKey;
INSERT INTO AutoKeyEntityListed (EntityKey,Listed,ItemIndex) VALUES
(CURRVAL('autokeyentity_entityKey_seq'),'Test 1 AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a', 0),
(CURRVAL('autokeyentity_entityKey_seq'),'Test 2 AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a', 1),
(CURRVAL('autokeyentity_entityKey_seq'),'Test 3 AutoKey 254e3c64-485e-42a4-b1cf-d2e1e629df6a', 2);
-- etc.

और EntityKey को पकड़ें AutoEntityKey . पर INSERTs से एक बार में एक मान . रिटर्निंग मानों को संभालने के लिए किसी प्रकार की स्क्रिप्ट की आवश्यकता हो सकती है। आप AutoKeyEntity . को भी लपेट सकते हैं और संबंधित AutoKeyEntityListed किसी फ़ंक्शन में INSERTs, फिर का उपयोग करें INTO EntityKey को हथियाने के लिए मान और इसे फ़ंक्शन से वापस कर दें:

INSERT INTO AutoKeyEntity /*...*/ RETURNING EntityKey INTO ek;
/* AutoKeyEntityListed INSERTs ... */
RETURN ek;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgmemcache सेटअप और उपयोग

  2. स्प्रिंग बूट के साथ जेपीए कई सारे मुद्दे

  3. INSERT ... ON CONFLICT (id) DO UPDATE... सिंटैक्स का उपयोग अनुक्रम आईडी के साथ कैसे किया जा सकता है?

  4. Postgresql, अद्यतन करें यदि कुछ अद्वितीय मान वाली पंक्ति मौजूद है, अन्यथा सम्मिलित करें

  5. Postgres में वर्तमान स्थानीय समय प्राप्त करने का सबसे साफ तरीका क्या है?