1
我试图按照建议here创建垂直分区表来存储时间序列数据。PostgreSQL继承表和插入触发器
到目前为止,我的模式是这样的:
CREATE TABLE events
(
topic text,
t timestamp,
value integer,
primary key(topic, t)
);
CREATE TABLE events_2014
(
primary key (topic, t),
check (t between '2014-01-01' and '2015-01-01')
) INHERITS (events);
现在,我想要创建一个INSTEAD OF INSERT
触发器,使事件可以插在events
表和行会在右边的分结束-表。但文件说,INSTEAD OF INSERT
触发器只能创建上看法,并不表(或子表):
CREATE OR REPLACE FUNCTION insert_events() RETURNS TRIGGER AS $insert_events$ BEGIN
IF new.t between '2014-01-01' and '2015-01-01' THEN
INSERT INTO events_2014 SELECT new.*;
...
END IF
RETURN NULL;
END;
$insert_events$ LANGUAGE PLPGSQL;
CREATE TRIGGER insert_events INSTEAD OF INSERT ON events FOR EACH ROW EXECUTE PROCEDURE insert_events();
ERROR: "events" is a table
DETAIL: Tables cannot have INSTEAD OF triggers.
什么是这样做的正确方法吗?
您在创建子表时似乎忘记了'INHERITS'子句。 –
非常正确,谢谢,现在编辑。 – Tom