Postgres规则在WHERE子句中替换单词

时间:2016-08-25 09:15:06

标签: postgresql select substitution rules

是否可以通过规则(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;

初始声明由不允许替换的客户发布。因此,替换必须在数据库端完成。

**编辑**

我可能不够具体。 我需要一个列名替换select语句的这种模式。 WHERE子句不断变化。以及 是否可以在规则本身中引用当前的SELECT语句?

根据我的需要将其分解为最低限度:

  • 获取当前的SELECT语句(如果它具有此特定模式)
  • 将“WHERE col2”替换为“WHERE col3”
  • 打包成可以部署在数据库方面的规则

1 个答案:

答案 0 :(得分:1)

使用case when声明

SELECT col1, col2, col3
FROM mytable
WHERE CASE WHEN foo='bar' THEN col3 ELSE col1 END = 1;