2009-07-22 17 views
5

मेरे पास एक लंबा चलने वाला फ़ंक्शन है जो नई पंक्तियों को सम्मिलित करना चाहिए। मैं इस फ़ंक्शन की प्रगति की जांच कैसे करूं?पोस्टग्रेज़ में गंदा पढ़ता है

मैं गंदा सोच रहा था पढ़ता है तो काम करेगा मैं http://www.postgresql.org/docs/8.4/interactive/sql-set-transaction.html पढ़ सकते हैं और निम्नलिखित कोड के साथ आया था और एक नया सत्र में यह भाग गया:


SET SESSION CHARACTERISTICS AS SERIALIZABLE; 

SELECT * FROM MyTable; 

Postgres मुझे एक सिंटैक्स त्रुटि देता है। मैं क्या गलत कर रहा हूं? अगर मैं इसे सही करता हूं, तो क्या मैं सम्मिलित रिकॉर्ड देखता हूं, जबकि वह लंबा फ़ंक्शन अभी भी चल रहा है?

धन्यवाद

उत्तर

10

PostgreSQL एक तरह से आप समारोह के बाहर से इस को देखने के लिए, उर्फ ​​READ UNCOMMITTED अलगाव स्तर को लागू नहीं करता है। आपका मूल दो विकल्प हैं:

  • आप कि अब तक कितने आप
  • समारोह वापस उसी डेटाबेस के लिए से dblink की तरह कुछ का उपयोग कर रहे हैं दिखाने के लिए, और एक काउंटर तालिका अद्यतन करने के लिए हर अब और फिर समारोह उपयोग RAISE NOTICE है वहां से। चूंकि यह एक पूरी तरह से अलग लेनदेन है, काउंटर जल्द ही दिखाई देगा जैसे लेनदेन करता है - आपको मुख्य लेनदेन (फ़ंक्शन कॉल के आसपास) को समाप्त करने की प्रतीक्षा नहीं करनी पड़ती है।
6

PostgreSQL Transaction Isolation

PostgreSQL में, आप चार मानक लेन-देन अलगाव से किसी भी स्तर अनुरोध कर सकते हैं। लेकिन आंतरिक रूप से, केवल दो अलग अलगाव स्तर होते हैं, जो स्तरों के अनुरूप होते हैं और प्रतिबद्ध और सीरियलज़ेबल पढ़ें। जब आप स्तर का चयन करते हैं तो असामान्य पढ़ें, आपको वास्तव में पढ़ा जाता है, और जब आप दोहराने योग्य का चयन करते हैं तो आपको वास्तव में सीरियलज़ेबल मिलता है, इसलिए वास्तविक अलगाव स्तर आपके द्वारा चुने गए की तुलना में कठोर हो सकता है। यह एसक्यूएल मानक द्वारा अनुमत है: चार अलगाव स्तर केवल परिभाषित करते हैं कि कौन सी घटना नहीं होनी चाहिए, वे परिभाषित नहीं करते कि कौन सी घटना होनी चाहिए।

संबंधित मुद्दे