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

PostgreSQL अनुक्रमों का अगला मान?

RETURNING

एक बार की यात्रा . के साथ यह संभव है डेटाबेस के लिए:

INSERT INTO tbl(filename)
VALUES ('my_filename')
RETURNING tbl_id;

tbl_id आमतौर पर एक serial होगा या IDENTITY (पोस्टग्रेज 10 या बाद का) कॉलम। मैनुअल में अधिक।

स्पष्ट रूप से मान प्राप्त करें

अगर filename tbl_id . को शामिल करने की आवश्यकता है (अनावश्यक रूप से), आप अभी भी एक ही प्रश्न का उपयोग कर सकते हैं।

lastval() का प्रयोग करें या अधिक विशिष्ट currval() :

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval('tbl_tbl_id_seq')   -- or lastval()
RETURNING tbl_id;

देखें:

  • एक ही INSERT के दौरान दूसरे कॉलम में सीरियल कॉलम का संदर्भ मान

यदि प्रक्रिया में कई अनुक्रम उन्नत हो सकते हैं (यहां तक ​​कि ट्रिगर या अन्य दुष्प्रभावों के माध्यम से भी) तो निश्चित तरीका है currval('tbl_tbl_id_seq') . का उपयोग करना ।

अनुक्रम का नाम

स्ट्रिंग शाब्दिक 'tbl_tbl_id_seq' मेरे उदाहरण में वास्तविक . माना जाता है अनुक्रम का नाम और regclass . पर डाला जाता है , जो एक अपवाद उत्पन्न करता है यदि उस नाम का कोई क्रम वर्तमान search_path में नहीं पाया जा सकता है ।

tbl_tbl_id_seq तालिका tbl . के लिए स्वचालित रूप से जेनरेट किया गया डिफ़ॉल्ट है एक सीरियल कॉलम के साथ tbl_id . लेकिन कोई गारंटी नहीं हैं। एक कॉलम डिफ़ॉल्ट किसी भी . से मान प्राप्त कर सकता है अनुक्रम यदि ऐसा परिभाषित किया गया है। और यदि तालिका बनाते समय डिफ़ॉल्ट नाम लिया जाता है, तो Postgres एक साधारण एल्गोरिथम के अनुसार अगला मुफ़्त नाम चुनता है।

अगर आप पता नहीं एक serial . के अनुक्रम का नाम कॉलम, समर्पित फ़ंक्शन का उपयोग करें pg_get_serial_sequence() . मक्खी पर किया जा सकता है:

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval(pg_get_serial_sequence('tbl', 'tbl_id'))
RETURNING tbl_id;

db<>फिडल यहाँ
पुराना sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL स्थापना के बाइनरी प्रारूप पर लिखने योग्य mongo_fdw एक्सटेंशन को संकलित करना।

  2. PostgreSQL में VACUUM प्रसंस्करण का अवलोकन

  3. PostgreSQL:बूलियन कॉलम के लिए इंडेक्स बनाएं

  4. विभिन्न सर्वर पर रेल के साथ पोस्टग्रेस्क्ल कॉपी कमांड के साथ समस्याएं

  5. PostgreSQL में प्रति पंक्ति केवल एक बार आस्थगित ट्रिगर निष्पादित करें