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


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_parse와 debug_print_plan(아마도 debug_pretty_print), 당신은 쿼리가 여러 단계를 통해 변환하는 방법을 볼 수 있습니다. 형식은 읽기 쉽지 않지만, 이에 대한 자세한 내용을 알고 싶다면 그만한 가치가있을 것입니다.


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