我正在尝试按行预先计算用户定义的函数。我的想法是将JSON对象作为其中一个字段中的文本对象,我想从中解析出其他一些“字段”,这些字段可以像查询其他任何真实字段一样在查询中返回。但是,解析JSON的开销很大。有没有办法以加速查询的方式预先计算这个解析函数?
请不要争辩说数据库中不应该有JSON作为文本;我知道利弊。
答案 0 :(得分:2)
首先,您可能对即将发布的JSON data type PostgreSQL 9.2感兴趣(现在很快就会发布)。
关于您的问题,您正在寻找物化视图(或更简单的形式:表格中的冗余预计算列)。 “物化视图”只是既定术语,而不是PostgreSQL数据库中的特殊对象。基本上,您使用预先计算的值创建一个冗余表,您可以在某些事件或及时刷新。
search for the term会给你一些答案。
答案 1 :(得分:1)
除了物化视图之外,请记住PostgreSQL还可以索引函数' output ,这样你就可以执行以下操作:
CREATE INDEX my_foo_bar_udf_idx ON foo (bar(baz));
仅当UDF标记为不可变时才有效。输出仅取决于参数。这使您可以选择针对查询参数运行函数,然后扫描索引而不是表。它不能满足所有用例,但它确实满足了许多用例,并且它通常可以帮助您避免实现视图的麻烦。