PostgreSQL で jsonb 型のカラムの一部を検索条件にする方法を備忘録として残しておく
詳細は公式を参照
方法
以下の DB 構成およびレコードの場合
- Books Table
- id field: SERIAL type ※Primary Key
- value1: 1
- value2: 2
- options field: JSONB type
- value1: {“key_1”: “aaa”, “key_2”: “bbb”}
- value2: {“key_1”: “ccc”, “key_2”: “ddd”}
- id field: SERIAL type ※Primary Key
SELECT options->>'key_2'
FROM books
WHERE options->>'key_1' = 'ccc';
#=> 'ddd'
以下の DB 構成およびレコードの場合(配列)
- Books Table
- id field: SERIAL type ※Primary Key
- value1: 1
- value2: 2
- options field: JSONB type
- value: [{“key_1”: “aaa”, “key_2”: “bbb”}, {“key_1”: “ccc”, “key_2”: “ddd”}]
- value: [{“key_1”: “eee”, “key_2”: “fff”}, {“key_1”: “ggg”, “key_2”: “hhh”}]
- id field: SERIAL type ※Primary Key
SELECT options->>'key_2'
FROM books, JSONB_ARRAY_ELEMENTS(options) option
WHERE option->>'key_1' = 'ccc';
#=> 'ddd'