【发布时间】:2011-01-18 02:09:16
【问题描述】:
我的 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 上执行插入,然后确定数据是否应该真正进入 child 或 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 进行选择,我会看到我的索引(比如 2、8 和 10),其余的将在另一个表中。
这是为什么?有什么办法可以阻止它吗?触发器是在插入之前设置的,所以我不明白为什么序列号会增加两次。
重要吗?
提前致谢。
【问题讨论】:
标签: database postgresql triggers auto-increment increment