私のアプリケーションではtimetravel関数(F.39。spi、PostgreSQL 9.1 Documentation)を使いたかったのですが、私にとってはうまく動作していないようです。テーブルに行を挿入するとすべてうまく動作しますが、開始日時は正しく設定されますが、これらの行を更新しようとすると、PRIMARY KEY制約に違反するエラーが発生します。彼は以前のタプルと同じプライマリIDを持つタプルを挿入しようとしています...postgresのTimetravel - PRIMARY KEY制約違反
データベースのすべてのテーブルからプライマリキーの制約を削除するのは面倒ですが、それは必要な機能です。だから、あなたはタイムトラベルでいくつかの経験がありますか?
何か助けていただければ幸いです。前もって感謝します。
DDL:与えられた
CREATE TABLE cities
(
city_id serial NOT NULL,
state_id integer,
name character varying(80) NOT NULL,
start_date abstime,
stop_date abstime,
CONSTRAINT pk_cities PRIMARY KEY (city_id),
CONSTRAINT fk_cities_states FOREIGN KEY (state_id)
REFERENCES states (state_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
-- Trigger: time_travel on cities
-- DROP TRIGGER time_travel ON cities;
CREATE TRIGGER time_travel
BEFORE INSERT OR UPDATE OR DELETE
ON cities
FOR EACH ROW
EXECUTE PROCEDURE timetravel('start_date', 'stop_date');
STATEMENT:
INSERT INTO cities(
state_id, name)
VALUES (20,'Paris');
、それは大丈夫です。私はstart_dateとstop_dateを取得します。 しかし、によって:
UPDATE cities SET name='Rome' WHERE name='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
);
の
スキーマ、。 あなたがそれらを見ることができます。
サンプル・データを表都市から:表状態から
サンプル・データをkorpusvictifrew.cba.pl/postgres_cities.png:
を使用する必要がありますが、私たちにCREATE TABLEとあなたが –
を実行しているUPDATE文を表示します([タイムトラベルの例]を相談してみてくださいヒントについてはhttps://github.com/postgres/postgres/blob/master/contrib/spi/timetravel.exampleを参照してください。 [timetravel docs](http://www.postgresql.org/docs/9.1/static/contrib-spi.html)を参照してください。そして、最後に、[時間旅行を使わずに同じ種類の問題を解決するための議論](0120-338-201) –
状態とサンプルレコードを州内に保有しています。 – tuxuday