Postgresql postgres中的时间旅行-违反主键约束

Postgresql postgres中的时间旅行-违反主键约束,postgresql,triggers,time-travel,Postgresql,Triggers,Time Travel,我想在我的应用程序中使用timetravel函数(F.39.spi,PostgreSQL 9.1文档),但它似乎对我来说并不正常。通过向表中插入行,一切都正常工作,我可以正确地获得开始和停止日期,但当我尝试更新这些行时,postgres会给我关于违反主键约束的错误。他正试图插入一个与前一个元组具有相同主id的元组 从数据库中的所有表中删除主键约束是愚蠢的,但这正是我需要的功能。也许你对时间旅行有一些经验 任何形式的帮助都将不胜感激。提前谢谢 DDL: 声明如下: INSERT INTO citi

我想在我的应用程序中使用timetravel函数(F.39.spi,PostgreSQL 9.1文档),但它似乎对我来说并不正常。通过向表中插入行,一切都正常工作,我可以正确地获得开始和停止日期,但当我尝试更新这些行时,postgres会给我关于违反主键约束的错误。他正试图插入一个与前一个元组具有相同主id的元组

从数据库中的所有表中删除主键约束是愚蠢的,但这正是我需要的功能。也许你对时间旅行有一些经验

任何形式的帮助都将不胜感激。提前谢谢

DDL:

声明如下:

INSERT INTO cities(
            state_id, name)
    VALUES (20,'Paris');
没关系。我有开始日期和停止日期。 但是:

我得到了前面描述的错误

国家模式

-- Table: states

-- DROP TABLE states;

CREATE TABLE states
(
  state_id serial NOT NULL, -- unikatowy numer wojewodztwa
  country_id integer, -- identyfikator panstwa, w ktorym znajduje sie wojewodztwo
  name character varying(50), -- nazwa wojewodztwa
  CONSTRAINT pk_states PRIMARY KEY (state_id ),
  CONSTRAINT uq_states_state_id UNIQUE (state_id )
)
WITH (
  OIDS=FALSE
);
不幸的是,作为一个新用户,我不允许在这里发布图片。 你可以在那里看到它们:

来自表格cities的样本数据:korpusvictifrew.cba.pl/postgres_cities.png


来自表states的示例数据:korpusvictifrew.cba.pl/states_data.png

Time travel将更新转换为旧记录的停止日期的更新,并插入一个新记录,其中包含已更改的数据和无限的停止日期。由于pk_cities的原因,您不能有多个city_id记录。时间旅行触发器不允许您违反该要求

您不能使用此选项:

CONSTRAINT pk_cities PRIMARY KEY (city_id )
你必须用这个

CONSTRAINT pk_cities PRIMARY KEY (city_id, stop_date)

向我们展示您正在运行的CREATE TABLE和UPDATE语句。您可以尝试咨询以获取提示。给那些没见过他们的人。最后,发布状态模式和状态中的示例记录。
CONSTRAINT pk_cities PRIMARY KEY (city_id )
CONSTRAINT pk_cities PRIMARY KEY (city_id, stop_date)