[pgpool-general-jp: 879] DML対象テーブルにレイアウト変更があった場合

松崎学 matsumana @ gmail.com
2011年 1月 7日 (金) 19:38:33 JST


松崎です。

お世話になります。

レプリケーションモードでCURRENT_TIMESTAMPや
DEFAULT値を使うINSERT文を実行したあと、
そのテーブルから項目が追加・削除された場合、
変更前のテーブルレイアウトでSQL文が組み立てられてしまいました。

pgpoolを再起動したら最新のテーブルレイアウトでSQL文が組み立てられたのですが、
起動したままでこのキャッシュ(?)をクリアする事は出来ますか?

■テストしたテーブルのレイアウト
DROP TABLE IF EXISTS MATSUZ_TEST_TIMESTAMP CASCADE
;

CREATE TABLE MATSUZ_TEST_TIMESTAMP
(
    COL1                            VARCHAR(128) NOT NULL,
    DTTM_DEFAULT                    TIMESTAMP DEFAULT LOCALTIMESTAMP
NOT NULL,  -- DEFAULT値で自動セット
    DTTM_TRRIGER                    TIMESTAMP NOT NULL,
         -- トリガーで自動セット
    DTTM_INSERT_STATEMENT           TIMESTAMP NOT NULL,
         -- INSERT文で明示的にセット
    CONSTRAINT PK_MATSUZ_TEST_TIMESTAMP PRIMARY KEY (COL1) USING INDEX
        TABLESPACE MST_INDEX
)
TABLESPACE MST_DATA
;

CREATE OR REPLACE FUNCTION TRG_MATSUZ_TEST_TIMESTAMP_TS()
RETURNS TRIGGER
AS
$$
BEGIN

    -- トリガーで自動セット
    NEW.DTTM_TRRIGER := CURRENT_TIMESTAMP;

    RETURN NEW;

END;
$$
LANGUAGE plpgsql
;

CREATE TRIGGER MATSUZ_TEST_TIMESTAMP_TS
    BEFORE INSERT OR UPDATE
    ON MATSUZ_TEST_TIMESTAMP
    FOR EACH ROW
    EXECUTE PROCEDURE TRG_MATSUZ_TEST_TIMESTAMP_TS()
;

■テストした更新SQL
insert into MATSUZ_TEST_TIMESTAMP
(
  COL1
, DTTM_INSERT_STATEMENT
)
values
(
  'a'
, CURRENT_TIMESTAMP
)
;

以上、よろしくお願いいたします。

-- 
松崎 学 <matsumana @ gmail.com>


pgpool-general-jp メーリングリストの案内