[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 メーリングリストの案内