PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्या मैं रूबी ऑन रेल्स पर पोस्टग्रेएसक्यूएल फंक्शन लिख सकता हूँ?

आपके प्रश्न का यह भाग:

<ब्लॉकक्वॉट>

मुझे पता है कि हम इसे 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 समझ नहीं पाएगा:बाधाओं की जांच करें, ट्रिगर्स, गैर-सरल-दिमाग वाले कॉलम डिफ़ॉल्ट, ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेएसक्यूएल, अधिकतम आईडी से चुनें

  2. भारित पंक्ति संभावनाओं के साथ PostgreSQL तालिका से यादृच्छिक पंक्ति का चयन करें

  3. PostgreSQL:psql सर्वर से कनेक्ट क्यों नहीं हो सकता है?

  4. PostgresPlus Advance Server 9.1 . के साथ PL/प्रॉक्सी का संकलन

  5. PostgreSQL में XML फ़ाइलें आयात करें