【发布时间】:2021-05-12 19:34:22
【问题描述】:
我正在使用物化视图来合并查询 3 个 json 列,因为我想将所有这些列与 1 个 GIN 索引一起查询。视图类似于这样:
CREATE MATERIALIZED VIEW IF NOT EXISTS test_materialized_view AS
SELECT t1.id, (t1.data1 || t1.data2 || COALESCE(t2.data1, '{}'::jsonb)) "data"
FROM table_1 t1 LEFT JOIN table_2 t2 ON (...);
现在可能会发生在 json 数据中有更长的键值对,我不想查询它们并且可以存储 1000 次,因为它们在 t2.data1 中。是否可以过滤合并的 json 并仅包含长度小于 x 个字符的键值对?这甚至会产生影响/减少保存的数据吗?
我不知道这些字段的 json 键。我基本上只是想删除所有长于 x 字符或数组/嵌套对象的键值对,但在 postgres 中并没有真正找到这样做的好方法
【问题讨论】:
-
如果
data1的 total 长度超过 256 个字符或从 JSONB 中删除所有键/值对,我不清楚您是否要“隐藏”t2.data1其中值超过 256 个字符。顺便说一句:为什么是 256?与 e.g. 相比,短于 256 个字符的字符串没有神奇的性能或存储改进。 258 或 261 个字符。 -
我要删除键值对。 256 是任何有意义的随机数
标签: sql postgresql jsonb