क्या मैं उसी गैर-लेनदेन में डाले गए डेटा का चयन कर सकता हूं?


21

शायद यह एक गूढ़ शुरुआत है, लेकिन मुझे इसका जवाब कहीं नहीं मिल रहा है। हर जगह मैंने पढ़ा है Transaction Isolationजिसके बारे में समवर्ती लेनदेन के भीतर डेटा की दृश्यता को हल करता है। मेरी चिंता एकल लेनदेन के भीतर का व्यवहार है।

यदि मैं कोई लेन-देन शुरू करता हूं, तो कुछ डेटा डालें, क्या मैं उन्हें सही चयन करने में सक्षम होने जा रहा हूं - अभी भी उसी के भीतर, अभी तक बिना किसी लेनदेन के? यदि हाँ, तो क्या यह व्यवहार समवर्ती लेनदेन के मामले में उल्लिखित लेनदेन अलगाव की तरह ही बदला जा सकता है?

विशिष्ट होने के लिए, मैं PostgreSQL 9.4 को लक्षित कर रहा हूं।

जवाबों:


17

हाँ।
एक ही लेन-देन के अंदर आपने जो कुछ भी किया था वह बाद में उसी लेनदेन के अंदर दिखाई देता है। जब तक प्रतिबद्ध न हो, तब तक अन्य लेन-देन न करें। यह सभी अलगाव स्तरों के लिए सच है, सिवाय इसके Read uncommittedकि "गंदे पढ़े" संभव हैं (लेकिन यह आपके प्रश्न को प्रभावित नहीं करता है)।

यह हर तालिका पंक्ति के लिए आयु और दृश्यता के आधार पर MVCC मॉडल (मल्टीवर्जन कंजर्वेशन कंट्रोल) के साथ कार्यान्वित किया जाता है TransactionId। एक ही लेन-देन में लिखे गए प्रत्येक नए पंक्ति संस्करण को समान xminमाना जाता है और माना जाता है कि "एक ही समय में" हुआ है।

एक ही कमांड में कई CTE (कॉमन टेबल एक्सप्रेशन) के लिए कॉर्नर केस है । कोई सोच सकता है कि उन्हें क्रमिक रूप से निष्पादित किया जाता है, लेकिन जब तक कि कोई सीटीई संदर्भ नहीं देता है, तब तक उनका अनुक्रम मनमाना नहीं होता है। और वे सभी क्वेरी की शुरुआत से एक ही स्नैपशॉट देखते हैं।

उदाहरण:

उन्नत उदाहरण:


3

कोशिश करते हैं :

CREATE OR REPLACE FUNCTION public.sp_get_user()
 RETURNS json
 LANGUAGE plpgsql
AS $function$BEGIN

INSERT INTO users (name, password) VALUES ('deadeye', 'test');
RETURN row_to_json(row) FROM (SELECT name, password FROM users WHERE name = 'deadeye') row;

END;$function$

अब, परीक्षण करते हैं:

SELECT sp_get_user();
{"name":"deadeye","password":"test"}

यह काम करता हैं ! जैसा कि इरविन ने कहा, लेन-देन में की गई हर चीज लेनदेन के अंदर दिखाई देती है। अलगाव केवल विभिन्न धागों के बीच होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.