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'
のインデックスを作成する方法は?
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));