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"