मैं एक उत्पादन डेटाबेस में एक इंडेक्स जोड़ना चाहता हूँ। सौभाग्य से हम पोस्टग्रेस चला रहे हैं, जो समवर्ती इंडेक्सिंग की अच्छी तरह से अनुमति देता है, इसलिए हम डाउनटाइम के बिना एक इंडेक्स जोड़ सकते हैं। कैच-समवर्ती इंडेक्स को लेनदेन के भीतर से जोड़ा नहीं जा सकता है, और रेल माइग्रेशन लेनदेन के अंदर सब कुछ लपेटता है।रेलवे को कैसे रोकें 3.1 लेनदेन में चलने से माइग्रेशन?
सौभाग्य से, ऐसा कुछ ऐसा है जो वास्तव में सरल समाधान की तरह दिखता है: ActiveRecord :: माइग्रेशन प्राइवेट विधि ddl_transaction को explained here के रूप में ओवरराइट करें।
class IndexUsersEmails < ActiveRecord::Migration
def ddl_transaction(&block)
block.call # do not start a transaction
end
def self.up
execute "CREATE INDEX CONCURRENTLY index_users_on_email ON users(email)"
end
end
समस्या यह है कि यह रेल 3.1 में काम नहीं कर रहा है। मैं ठीक करता हूं कि गिस्ट में कोड क्या करता है, और रेल पूरी तरह से इसे अनदेखा करते हैं। इस पर जाने के लिए कोई विचार है?
आप विधि परिभाषा बदल रहा है इतना है कि यह एक वर्ग विधि है की कोशिश की? जैसे 'def self.ddl_transaction (& block) ... ' –