2012-11-19 22 views
5

मुझे पता है कि MySQL डीडीएल स्टेटमेंट्स जैसे तालिका/निर्माण तालिका/आदि में एक अंतर्निहित लेनदेन प्रतिबद्धता का कारण बनता है।क्या PostgreSQL में किसी लेनदेन में डीडीएल परिवर्तनों को लपेटना संभव है?

जैसा कि हम PostgreSQL पर जा रहे हैं, क्या लेनदेन में एकाधिक डीडीएल स्टेटमेंट को लपेटना संभव है?

यह माइग्रेशन स्क्रिप्ट को और अधिक मजबूत बना देगा, एक असफल डीडीएल परिवर्तन सब कुछ रोलबैक के कारण होगा।

उत्तर

10

डीडीएल विवरण लेनदेन द्वारा कवर किए जाते हैं। मुझे आधिकारिक दस्तावेज में प्रासंगिक अनुभाग नहीं मिल रहा है, लेकिन विकी को एक लिंक प्रदान किया है जो इसे कवर करता है।

बस याद रखें कि पोस्टग्रेस्क्ल में लेनदेन स्वचालित रूप से खोले नहीं जाते हैं, आपको उन्हें BEGIN या START TRANSACTION से शुरू करना होगा।

Postgresql Wiki about Transactional DDL

+5

मुझे नहीं लगता कि मैन्युअल में लेनदेन डीडीएल के बारे में एक विशेष अध्याय है। अगर मुझे गलत नहीं लगता है तो आप प्रत्येक कथन को लेनदेन के लिए मान सकते हैं ** जब तक ** अन्यथा नहीं कहा जाता है। तो मैन्युअल केवल उन लोगों को दस्तावेज करेगा जो गैर-लेनदेन (उदा। 'डेटाबेस बनाएं') –

8

हर Postgres DDL बयान लेन-देन में लिपटे जा सकता है। DROP DATABASE/DROP TABLESPACE और कुछ अन्य फाइल-सिस्टम से संबंधित कैंट रोलबैक जैसे विवरण।

इसके अलावा:

ALTER प्रकार ... मूल्य (फार्म का है कि एक enum प्रकार के लिए एक नया मूल्य कहते हैं) जोड़ें एक सौदे ब्लॉक के अंदर निष्पादित नहीं किया जा सकता है।

TRUNCATE जैसे कुछ बयान 'एमवीसीसी सेव नहीं' हैं। उस तरह के वक्तव्य से किए गए परिवर्तन अन्य प्रश्नों को प्रभावित कर सकते हैं, भले ही वे वापस लुढ़क जाए।

तो - अपने डीडीएल के लेन-देन सुरक्षित होने पर यह पता लगाने के लिए पोस्टग्रेज़ के अपने संस्करण के लिए आधिकारिक मैन्युअल पढ़ें।

+1

'ट्रंकेट' समस्या कम से कम 9.2 में सच है, कम से कम प्रलेखन के अनुसार। http://www.postgresql.org/docs/current/static/sql-truncate.html। डीबी निर्माण/ड्रॉप और 'TRUNCATE' को छोड़कर बहुत कुछ सब कुछ लेन-देन-सुरक्षित है। –

+1

और 'ड्रोप टैबलेटस्पेस 'के बारे में क्या? इस http://stackoverflow.com/questions/1108749/limits-on-postgresql-chechema-changes-inside-transactions?rq=1 के अनुसार यह सुरक्षित नहीं है (या यह सुरक्षित नहीं था)। –

+0

महत्वपूर्ण स्पष्टीकरण। ट्रांसेट आईएस लेनदेन सुरक्षित है, यह एमवीसीसी सुरक्षित नहीं है। –