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

रेल कॉलम प्रकार बदलते हैं और कॉलम मान अपडेट करते हैं

ALTER के यूजिंग क्लॉज का उपयोग करके आप इसे एक बार में आसानी से कर सकते हैं। टेबल :

एक साधारण एसक्यूएल टाइप कास्ट आपको स्ट्रिंग्स के साथ छोड़ देगा 'true' और 'false' तो आप एक USING जोड़ना चाहते हैं। मैं AR को बायपास करके हाथ से करूँगा:

connection.execute(%q(
  alter table users
  alter column active
  type text
  using case when active then 'active' else 'inactive' end
))

आपके लिए महत्वपूर्ण हिस्सा है using case ... अंत में भाग। आप सामान्य AR-ish change_column . के साथ इसका उपयोग कर सकते हैं सही काम करने के लिए AR को धोखा देकर सामान:

class ChangeColumnTypeInUsers < ActiveRecord::Migration
  def up
    change_column :users, :active, "text using case when active then 'active' else 'inactive' end"
  end

  def down
    change_column :users, :active, "boolean using active = 'active'"
  end
end

ध्यान दें कि मैं text का उपयोग कर रहा हूं स्तंभ प्रकार के रूप में। रेल varchar(255) . का प्रयोग करेंगे डेटाबेस के अंदर जब आप कहते हैं :string एक सीमा के बिना, PostgreSQL के साथ यह बहुत ही व्यर्थ है क्योंकि यह सभी स्ट्रिंग प्रकारों के लिए भंडारण को संभालता है काफी समान आंतरिक रूप से , char(n) . पर लंबाई प्रतिबंध और varchar(n) वास्तव में उन्हें text . की तुलना में उपयोग करने के लिए अधिक महंगा बनाते हैं . तब केवल समय :string PostgreSQL के साथ समझ में आता है जब आपके पास एक विशिष्ट :limit . शामिल करने का कोई कारण होता है (और फिर एक text CHECK के साथ कॉलम लंबाई पर बाधा अधिक समझ में आती है लेकिन एआर "उन्नत" चीजों जैसे CHECK के बारे में जानने के लिए बहुत गूंगा है बाधाएं)।



  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 - 2 टेबल के बीच कॉलम अंतर की एक सूची प्राप्त करें

  3. पोस्टग्रेज एनओएसक्यूएल जेसन डेटा में जेसन सरणी का कुल योग प्राप्त करें

  4. PostgreSQL में प्रति पंक्ति केवल एक बार आस्थगित ट्रिगर निष्पादित करें

  5. PostgreSQL कोई ऑटो वृद्धि समारोह नहीं?