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

अस्थायी तालिकाओं के लिए पोस्टग्रेस्क्ल थ्रेड सुरक्षा

एक ही सत्र में सभी कार्यों के लिए अस्थायी तालिकाएँ दिखाई देती हैं। तो आप नहीं उसी सत्र में . उसी नाम की एक अस्थायी तालिका बनाएं इससे पहले कि आप जो मौजूद है उसे छोड़ दें (अपने मामले में लेन-देन करें)।

आप उपयोग करना चाह सकते हैं:

CREATE TEMP TABLE tmptbl IF NOT EXISTS ...

CREATE TABLE के बारे में अधिक जानकारी मैनुअल में।

अद्वितीय अस्थायी तालिकाएं

प्रति "थ्रेड" (उसी सत्र में) अस्थायी तालिका को स्थानीय बनाने के लिए आपको अद्वितीय तालिका नाम का उपयोग करने की आवश्यकता है . एक तरीका यह होगा कि एक अनबाउंड SEQUENCE . का उपयोग किया जाए और गतिशील SQL - plpgsql जैसी प्रक्रियात्मक भाषा में या किसी DO कथन में (जो मूल रूप से किसी फ़ंक्शन को संग्रहीत किए बिना समान है।

एक भागो:

CREATE SEQUENCE myseq;

उपयोग करें:

DO $$
BEGIN
EXECUTE 'CREATE TABLE tmp' || nextval('myseq')  ||'(id int)';
END;
$$

नवीनतम तालिका नाम जानने के लिए:

SELECT 'tmp' || currval('myseq');

या यह सब एक plpgsql फ़ंक्शन में डालें और तालिका लौटाएँ या तालिका नाम का पुन:उपयोग करें।

आगे के सभी SQL कमांड को गतिशील रूप से निष्पादित किया जाना है, हालांकि, सादे SQL स्टेटमेंट हार्ड कोडेड आइडेंटिफायर के साथ काम करते हैं। तो, यह शायद सबसे अच्छा है, इसे एक plpgsql फ़ंक्शन में रखना।

एक ही अस्थायी तालिका का उपयोग करने के लिए अद्वितीय आईडी

एक अन्य संभावित समाधान समान अस्थायी तालिका . का उपयोग करना हो सकता है एक ही सत्र में सभी थ्रेड्स के लिए और एक कॉलम जोड़ें thread_id मेज पर। यदि आप सुविधा का भारी उपयोग करते हैं, तो कॉलम को अनुक्रमित करना सुनिश्चित करें। फिर एक अद्वितीय thread_id का उपयोग करें प्रति थ्रेड (उसी सत्र में)।

केवल एक बार:

CREATE SEQUENCE myseq;

प्रति थ्रेड एक बार:

CREATE TEMP TABLE tmptbl(thread_id int, col1 int) IF NOT EXISTS;
my_id :=  nextval('myseq'); -- in plpgsql
-- else find another way to assign unique id per thread

एसक्यूएल:

INSERT INTO tmptbl(thread_id, col1) VALUES
(my_id, 2), (my_id, 3), (my_id, 4);

SELECT * FROM tmptbl WHERE thread_id = my_id;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज:CAST विफलताओं के लिए एक डिफ़ॉल्ट मान परिभाषित करें?

  2. PostgreSQL - तालिका नाम के रूप में गतिशील मान

  3. क्या दशमलव डेटा प्रकारों (MySQL / Postgres) का उपयोग करके कोई प्रदर्शन हिट है

  4. PostgreSQL में सभी कार्यों को सूचीबद्ध करने के 3 तरीके

  5. PostgreSQL में सिस्टम और त्रुटि संदेशों की भाषा बदलें