5

postgresql jsonb 열에 부분 색인을 추가하려고합니다. jsonb 열의 이름은 email_provider입니다. 나는 아래와 같이 열에 부분 색인을 추가하려고 시도했지만 이와 같이 다른 오류가 발생합니다. PG :: UndefinedColumn : 오류 : 열 "email_povider"가 존재하지 않습니다. 그리고 다른 경우에는 오류가 발생합니다 : PG :: AmbiguousFunction 오류 : 연산자의 고유 아니다 : - :postgresql jsonb 필드의 부분 색인 만들기

add_index :accounts, :name, name: "index_accounts_on_email_provider_kind", using: :gin, where: "('email_provider' -> 'sparkpost' ->> 'smtp_host' = 'www.sparkpost.com') AND ('email_povider' -> 'amazon ses' ->> 'smtp_host' = 'www.awses.com')" 

email_provider 열에 대한 JSON은 다음과 같다 :

알려지지 레일 -5- 마이그레이션이 모양에

부분 인덱스> 미지 아래 허용 대답에 약간의 조정을 바탕으로

, 코드 내가 BTREE하지 진에게 인덱스를 만드는 데 사용하고

class CreateAccounts < ActiveRecord::Migration[5.0] 
    def change 
     create_table :accounts do |t| 
     t.string :name, null: false 
     t.jsonb :email_provider, null: false 
     t.jsonb :social_account, default: '[]', null: false 
     t.timestamps 
    end 
     add_index :accounts, :name, name: "index_accounts_on_email_provider_kind", using: :gin, where: "('email_provider' -> 'sparkpost' ->> 'smtp_host' = 'www.sparkpost.com') AND ('email_povider' -> 'amazon ses' ->> 'smtp_host' = 'www.awses.com')" 

     add_index :accounts, :name, name: "index_accounts_on_social_account_type", using: :gin, where: " 'social_account' @> [{'type': 'facebook'}] AND 'social_account' @> [{'type': 'twitter'}]" 
    end 
end 

업데이트 :

{ "email_provider": { "sparkpost": { "smtp_host": "www.sparkpost.com", "smtp_port": "" }, "aws ses": { "smtp_host": "www.amazon/ses.com ", "smtp_port": " ", "username": " ", "password": " " } } } 

표는 다음과 같습니다 in rails activerecord는 다음과 같습니다.

add_index :accounts, :name, name: "index_accounts_on_name_email_provider", where: "email_provider -> 'sparkpost' ->> 'smtp_host' = 'www.sparkpost.com' AND email_provider -> 'amazon ses' ->> 'smtp_host' = 'www.awses.com' " 

add_index :accounts, :name, name: "index_accounts_on_name_social_account", where: " social_account @> '[{\"type\": \"facebook\"}]'::jsonb AND social_account @> '[{\"type\": \"twitter\"}]'::jsonb" 

답변