在 Aurora PostgreSQL 中,jsonb_path_match 和 operator @@ 都可以用于对 JSONB 类型的数据进行过滤和查询。不同之处在于,jsonb_path_match 可以使用 JSONPath 表达式进行更复杂的匹配,而 operator @@ 则只能进行简单的字符串匹配。
使用 GIN 索引可以显著提高 JSONB 数据的查询效率。以下是具体的代码示例:
创建一个测试表,包含一个名为 data 的 JSONB 列:
CREATE TABLE my_table ( id SERIAL PRIMARY KEY, data JSONB );
添加 GIN 索引:
CREATE INDEX idx_data_gin ON my_table USING GIN (data);
使用 operator @@ 进行查询:
SELECT * FROM my_table WHERE data @@ '{"key1": "value1"}';
使用 jsonb_path_match 进行查询:
SELECT * FROM my_table WHERE jsonb_path_match(data, '$.key1 ? (@ == "value1")');
请注意,jsonb_path_match 中的 JSONPath 表达式需要使用单引号括起来,而不是双引号。同时,这里的 ?(@ == "value1") 表示根据 key1 的值进行匹配。
总之,如果需要进行复杂的匹配操作,可以选择使用 jsonb_path_match;如果只是进行简单的字符串匹配,可以使用 operator @@。同时,使用 GIN 索引可以大大提高 JSONB 数据的查询效率。