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

रेल माइग्रेटन में, जब मैं माइग्रेशन चलाता हूं तो उस समय के बजाय मैं कॉलम का डिफ़ॉल्ट मान अभी() कैसे सेट करूं?

यह अच्छी तरह से प्रलेखित नहीं है, लेकिन आप एक लैम्ब्डा को एक माइग्रेशन में डिफ़ॉल्ट मान के रूप में आपूर्ति कर सकते हैं और यह द राइट थिंग करेगा। अगर आप यह कहते हैं:

def change
  change_column_default :stratum_worker_submissions, :created_at, -> { 'now()' }
end

तब कॉलम का डिफ़ॉल्ट मान now() . पर सेट हो जाएगा और डेटाबेस फ़ंक्शन now() कॉलम के लिए डिफ़ॉल्ट मान की आवश्यकता होने तक कॉल नहीं किया जाएगा। फिर अगर आप \d stratum_worker_submissions psql . में आप देखेंगे:

created_at | timestamp without time zone | not null default now()

जैसी इच्छा। जब माइग्रेशन चलता है तो किसी भी अन्य डिफ़ॉल्ट का मूल्यांकन किया जाएगा और आपको डिफ़ॉल्ट के रूप में एक निश्चित टाइमस्टैम्प मिलेगा।

वैकल्पिक रूप से, आप इसे हमेशा SQL का उपयोग करके हाथ से कर सकते हैं:

def up
  connection.execute(%q(
    alter table stratum_worker_submissions
    alter column created_at
    set default now()
  ))
end
def down
  connection.execute(%q(
    alter table stratum_worker_submissions
    alter column created_at
    drop default
  ))
end

ध्यान दें कि यदि आप SQL के साथ मैन्युअल रूप से स्कीमा बदलना शुरू करते हैं तो आप ऐसे काम करना शुरू कर सकते हैं जो db/schema.rb में दिखाई नहीं देंगे। जैसा कि आप जल्दी से SQL में जा सकते हैं कि ActiveRecord समझ में नहीं आता है। अगर ऐसा होता है तो आप db/schema.rb . से बदल सकते हैं करने के लिए db/structure.sql config/application.rb . को बदलकर :

config.active_record.schema_format = :sql

और फिर db/schema.rb . की जगह db/structure.sql . के साथ संशोधन नियंत्रण में और db:structure . का उपयोग करके सामान्य db:schema . के स्थान पर रेक कार्य कार्य।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY को jsonb इनर फील्ड पर पोस्टग्रेज करता है

  2. PostgreSQL 8.4 में उच्चारण वर्णों को क्रमित करने में समस्या

  3. पोस्टग्रेज:एक चयन में न्यूनतम, अधिकतम, कुल मान प्राप्त करें

  4. PostgreSQL स्ट्रीमिंग प्रतिकृति - एक गहरा गोता

  5. PostgreSQL:42883 ऑपरेटर मौजूद नहीं है:समय क्षेत्र के बिना टाइमस्टैम्प =टेक्स्ट