규칙이 적용된 후 쿼리를 어떻게 볼 수 있습니까?


9

에서 문서 - 37.3.1.1. "단계별 첫 번째 규칙"

CREATE TABLE shoelace_log (
    sl_name    text,          -- shoelace changed
    sl_avail   integer,       -- new available value
    log_who    text,          -- who did it
    log_when   timestamp      -- when
);

CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data
    WHERE NEW.sl_avail <> OLD.sl_avail
    DO INSERT INTO shoelace_log VALUES (
                                    NEW.sl_name,
                                    NEW.sl_avail,
                                    current_user,
                                    current_timestamp
                                );

이제 누군가가합니다 :

(1) UPDATE shoelace_data SET sl_avail = 6 WHERE sl_name = 'sl7';

파서는이 추가 쿼리를 생성합니다.

(2) INSERT INTO shoelace_log VALUES (
       shoelace_data.sl_name, 6,
       current_user, current_timestamp )
  FROM shoelace_data
 WHERE 6 <> shoelace_data.sl_avail
   AND shoelace_data.sl_name = 'sl7';

질문은 : 쿼리 (1)이 (1) + (2)로 어떻게 다시 쓰여지는지를 알려주는 도구가 있습니까?

답변:


5

재 작성은 내부 트리 표현에서 발생하기 때문에 재 작성된 쿼리의 SQL 표현을 직접 볼 수있는 방법은 없으며이를 다시 SQL로 변환하는 것은 쉽지 않습니다. 가장 가까운 것은 구성 매개 변수를 켜는 것입니다.이 매개 변수 debug_print_rewritten는 해당 내부 트리 형식의 표현을 서버 로그에 인쇄합니다. 당신은 설정과 함께이를 사용하는 경우 debug_print_parsedebug_print_plan(아마도 debug_pretty_print), 당신은 쿼리가 여러 단계를 통해 변환하는 방법을 볼 수 있습니다. 형식은 읽기 쉽지 않지만, 이에 대한 자세한 내용을 알고 싶다면 그만한 가치가있을 것입니다.


또한 EXPLAIN은 관련된 쿼리 수와 유형에 대한 정보를 제공하고 데이터베이스의 디버그 로그보다 훨씬 읽기 쉽습니다.
hegemon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.