【发布时间】:2012-05-24 12:29:42
【问题描述】:
我希望仅当 PL/PGSQL 函数 (my_function) 的参数 (my_table.x) 属于预定义间隔(例如 [100,1000])时才允许执行。
我们以下面的查询为例:
(q)SELECT * FROM my_table WHERE my_function(mytable.x);
我希望这个查询自动重写以检查 mytable.x 是否属于区间 [100,1000] :
(q')SELECT * FROM my_table WHERE (my_table.x BETWEEN 100 AND 1000) AND my_function(my_table.x);
EXPLAIN ANALYSE 命令显示第二个查询确实比第一个快。
如何更改查询执行计划以自动执行查询重写(q into q')的过程?
我在哪里可以适当地存储有关与my_function 关联的区间 [100,1000] 的元数据?
提前致谢,
托马斯·吉罗
我需要的帮助将帮助一个关于将模糊逻辑集成到 PostgreSQL 中的项目:[https://github.com/postgresqlf/PostgreSQL_f/][PostgreSQLf]
【问题讨论】:
-
函数
my_function调用如下函数 CREATE OR REPLACE FUNCTION low(val double precision) RETURNS double precision AS $BODY$ SELECT trapezoidal_fuzzy_predicate($1, 0,0,1000,100000);$BODY $ LANGUAGE sql 不可变
标签: postgresql query-optimization plpgsql