【发布时间】:2016-08-25 09:15:06
【问题描述】:
是否可以用规则 (CREATE RULE myrule AS ON SELECT TO mytable...) 替换 SELECT 语句的 WHERE 子句中的单词?
SELECT col1, col2
FROM mytable
WHERE col2 = 1;
应该变成
SELECT col1, col2
FROM mytable
WHERE col3 = 1;
初始语句由不允许替换的客户端发出。因此,替换必须在数据库端完成。
** 编辑**
我可能不够具体。 我需要一个列名替换这种选择语句的模式。 WHERE 子句不断变化。以及 是否可以在规则本身中引用当前的 SELECT 语句?
分解到最低限度这是我需要的:
- 获取当前的 SELECT 语句(如果它具有这种特定模式)
- 将“WHERE col2”替换为“WHERE col3”
- 打包成一个可以部署在数据库端的规则
【问题讨论】:
-
您可以使 SQL 动态化,在其中传递所有三个参数(而不是文字),然后对其进行处理,以便当它获得一个空白参数时它变为 true...例如
where (col1 = ? or ? is null) and (col2 = ? or ? is null) -
不,这是不可能的。如果您可以设置规则,则查询将返回
col1, col3而不是col1, col2。 -
这就是为什么我的示例中的替换包含 WHERE 以确保仅替换 WHERE 子句中的表名
标签: postgresql select substitution rules