postgresデータベースにいくつかのテーブルがあり、そのうちのいくつかは相互に継承しています。
例えば:
CREATE TABLE parent_table(parent_table_id SERIAL PRIMARY KEY,
my_col1 VARCHAR(16) NOT NULL,
my_timestamp TIMESTAMP WITH TIME ZONE NOT NULL);
CREATE TABLE child_table() INHERITS (parent_table);
CREATE TABLE step_child_table() INHERITS (parent_table);
parent_tableで挿入を実行し、データを実際に子テーブルまたはstep_childテーブルに入れる必要があるかどうかを判断するトリガーがあります。
例えば:
CREATE OR REPLACE FUNCTION my_parent_trigger() RETURNS TRIGGER AS $$
BEGIN
IF (NEW.my_col1 > 100) THEN
INSERT INTO child_table(my_col1, my_timestamp) VALUES (NEW.my_col1, NEW.my_timestamp);
ELSE
INSERT INTO step_child_table(my_col1, my_timestamp) VALUES (NEW.my_col1, NEW.my_timestamp);
END IF;
RETURN NULL;
END;
$$
CREATE TRIGGER my_trigger BEFORE INSERT ON parent_table FOR EACH ROW EXECUTE PROCEDURE my_parent_trigger();
問題は、インデックスが2ずつ増加していることです。データを挿入し、parent_tableで選択を行うと、インデックスが2から始まり、4、6、8、10、...に進むことがわかります。 child_tableでselectを実行すると、インデックス(2、8、および10など)が表示され、残りは他のテーブルに表示されます。
どうしてこれなの?それを止める方法はありますか?トリガーは挿入前に設定されているので、シリアルが2回インクリメントされる理由がわかりません。
それは重要ですか?
前もって感謝します。