2016-08-25 2 views
1

SELECT 문의 WHERE 절에있는 단어를 규칙 (CREATE RULE myrule AS ON SELECT TO mytable ...)으로 바꿀 수 있습니까? WHERE 절의 단어를 대체하는 Postgres 규칙

SELECT col1, col2 
FROM mytable 
WHERE col2 = 1; 

SELECT col1, col2 
FROM mytable 
WHERE col3 = 1; 

초기 문이 대체를 허용하지 않는 클라이언트에 의해 발행 될 것이다. 따라서 대체는 데이터베이스 측에서 수행되어야합니다.

** 편집 **

내가 충분히 특정되지 않았을 수 있습니다. 이 종류의 select 문 패턴에 대해 열 이름 대체가 필요합니다. WHERE 절은 계속 변경됩니다. 규칙 자체에서 현재 SELECT 문을 참조 할 수 있습니까?

이 내가 필요로 무엇을 최소한으로 세분화 :

  • 교체합니다 (이 특정 패턴이있는 경우)

    • 현재 SELECT 문을 "WHERE COL2"와 "WHERE COL3"
    • 는 것을
  • +0

    세 개의 매개 변수 (리터럴이 아닌)를 모두 전달한 다음이를 처리하여 빈 매개 변수를 얻으면 사실이 될 수 있습니다. 예를 들어'where (col1 =? 또는? null) 및 (col2 =? 또는?가 null)' – Hambone

    +0

    아니요, 불가능합니다. 규칙을 설정할 수 있으면 쿼리는'col1, col2' 대신'col1, col3'을 반환합니다. – klin

    +0

    왜 WHERE 절의 테이블 이름 만 바뀌 었는지 확인하기 위해 예제에서의 대체에 WHERE가 포함되어 있습니다. – andehhh

    답변

    1

    의 데이터베이스 측면을 사용 case when 문에 배포 할 수있는 규칙에 포장

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