web-dev-qa-db-ja.com

JSONBデータ型のキー/値のインデックスを作成できますか?

JSONBデータ型のキー/値のインデックスを作成できますか?

たとえば、次のスキーマの場合:

CREATE TABLE x (
  id BIGSERIAL,
  data JSONB
);
CREATE TABLE y (
  id BIGSERIAL,
  data JSONB
);

遅いクエリ:

SELECT *
FROM x
  LEFT JOIN y
    ON (y.data->>'x_id')::BIGINT = x.id

そのようなクエリに使用できるy.data->>'x_id'のインデックスを作成する方法は?

5
Kokizzu

bigintにキャストされたキー 'x_id'の値に対して 式インデックス を提案します-プレーン(デフォルト)btree、GINではありません。ここでの特定の困難:型キャストの短い表記では、索引作成の構文を機能させるために括弧の複数のレイヤーが必要になります。

CREATE INDEX y_data_xid_idx ON y (((y.data->>'x_id')::bigint));

むしろ明示的な形式を使用します(同じ効果を得るため):

CREATE INDEX y_data_xid_idx ON y (cast(y.data->>'x_id' AS bigint));
6