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

रेल में LOWER (users.username) पर इंडेक्स कैसे बनाएं (पोस्टग्रेज का उपयोग करके)

हां, वह सत्यापन उस तरह की क्वेरी करेगा और उस तरह की क्वेरी एक टेबल स्कैन करने वाली है।

आपको वास्तव में यहां कुछ समस्याएं हैं:

  • सत्यापन दौड़ की स्थिति के अधीन है क्योंकि तर्क उस डेटाबेस में नहीं है जहां यह संबंधित है। सामान्य रेल विचारधारा की परवाह किए बिना सभी डेटा अखंडता मुद्दों के लिए डेटाबेस जिम्मेदार होना चाहिए।
  • आपका सत्यापन तालिका स्कैन को ट्रिगर करता है और कोई भी तालिका स्कैन पसंद नहीं करता है।

आप उन दोनों समस्याओं को एक सूचकांक से हल कर सकते हैं। पहली समस्या डेटाबेस के अंदर एक अद्वितीय अनुक्रमणिका का उपयोग करके हल की जाती है। दूसरी समस्या lower(username) . के परिणाम को अनुक्रमित करके हल की जाती है के बजाय username

AFAIK रेल अभी भी अभिव्यक्तियों पर अनुक्रमणिका को नहीं समझती है, इसलिए आपको दो काम करने होंगे:

  1. schema.rb . से स्विच करें करने के लिए structure.sql रेल को अपनी अनुक्रमणिका के बारे में भूलने से रोकने के लिए। आपके config/application.rb . में आप सेट करना चाहेंगे:

    config.active_record.schema_format = :sql
    

    आपको db:structure:* . का उपयोग भी शुरू करना होगा db:schema:* . के बजाय रेक कार्य कार्य। एक बार जब आप structure.sql पर स्विच कर लेते हैं , आप हटा सकते हैं db/schema.rb चूंकि इसे अब अपडेट या उपयोग नहीं किया जाएगा; आप db/structure.sql tracking पर नज़र रखना भी शुरू करना चाहेंगे संशोधन नियंत्रण में।

  2. माइग्रेशन में थोड़ा सा SQL लिखकर इंडेक्स को हाथ से बनाएं। यह आसान है:

    def up
      connection.execute(%q{
        create index idx_users_lower_username on users(lower(username))
      })
    end
    
    def down
      connection.execute(%q{
        drop index idx_users_lower_username
      })
    end
    

बेशक यह आपको PostgreSQL-विशिष्ट चीजों के साथ छोड़ देगा लेकिन इसमें चिंता की कोई बात नहीं है क्योंकि 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. Postgres डेटाबेस में एकाधिक स्कीमा पर hstore स्थापित करने का सबसे अच्छा तरीका?

  3. PostgreSQL:अद्वितीय उल्लंघन:7 त्रुटि:डुप्लिकेट कुंजी मान अद्वितीय बाधा का उल्लंघन करता है users_pkey

  4. Postgresql को किसी दिए गए वर्ष में सभी iso सप्ताह का पहला और अंतिम दिन मिलता है

  5. क्या \ copy कमांड पोस्टग्रेज में कमिट और रोलबैक को हैंडल करता है?