आपके प्रश्न का यह भाग:
<ब्लॉकक्वॉट>मुझे पता है कि हम इसे PostgreSQL में मैन्युअल रूप से बना सकते हैं, लेकिन सक्रिय रिकॉर्ड के साथ "जादू" यह है कि डेटाबेस को सभी मॉडलों के साथ फिर से बनाया जा सकता है।
मुझे बताता है कि आप वास्तव में सामान्य रेल माइग्रेशन प्रक्रिया और रेक कार्यों जैसे कि db:schema:load
के साथ PostgreSQL फ़ंक्शंस को एकीकृत करने का एक तरीका ढूंढ रहे हैं। ।
माइग्रेशन में फ़ंक्शन जोड़ना और हटाना आसान है:
def up
connection.execute(%q(
create or replace function ...
))
end
def down
connection.execute(%q(
drop function ...
))
end
आपको अलग up
. का उपयोग करने की आवश्यकता है और down
एक change
. के बजाय विधियां विधि क्योंकि ActiveRecord को पता नहीं होगा कि कैसे लागू किया जाए, अकेले फ़ंक्शन निर्माण को उलट दें। और आप connection.execute
. का उपयोग करते हैं PostgreSQL को रॉ फंक्शन डेफिनिशन फीड करने के लिए। आप इसे reversible
. के साथ भी कर सकते हैं अंदर change
:
def change
reversible do |dir|
dir.up do
connection.execute(%q(
create or replace function ...
))
end
dir.down do
connection.execute(%q(
drop function ...
))
end
end
end
लेकिन मुझे लगता है कि up
. से ज्यादा शोर है और down
।
हालांकि, schema.rb
और सामान्य रेक कार्य जो schema.rb
. के साथ काम करते हैं (जैसे db:schema:load
और db:schema:dump
) को पता नहीं चलेगा कि पोस्टग्रेएसक्यूएल फ़ंक्शंस और अन्य चीजों के साथ क्या करना है जो ActiveRecord समझ में नहीं आता है। हालांकि इसके लिए एक तरीका है, आप structure.sql
. का उपयोग करना चुन सकते हैं फ़ाइल के बजाय schema.rb
सेटिंग द्वारा:
config.active_record.schema_format = :sql
आपके config/application.rb
. में फ़ाइल। उसके बाद, db:migrate
एक db/structure.sql
लिखेगा फ़ाइल (जो आपके डेटा के बिना आपके PostgreSQL डेटाबेस का सिर्फ एक कच्चा SQL डंप है) के बजाय db/schema.rb
. structure.sql
. के साथ काम करने के लिए आप विभिन्न रेक कार्यों का भी उपयोग करेंगे :
db:structure:dump
db:schema:dump
. के बजाय-
db:structure:load
db:schema:load
. के बजाय
बाकी सब कुछ वैसा ही काम करना चाहिए।
यह दृष्टिकोण आपको अपने डेटाबेस में अन्य चीजों का उपयोग करने देता है जिन्हें ActiveRecord समझ नहीं पाएगा:बाधाओं की जांच करें, ट्रिगर्स, गैर-सरल-दिमाग वाले कॉलम डिफ़ॉल्ट, ...