내 응용 프로그램에 timetravel 함수 (F.39. spi, PostgreSQL 9.1 설명서)를 사용하고 싶지만 제대로 작동하지 않습니다. 테이블에 행을 삽입하면 모든 것이 정상적으로 작동하고 시작과 종료가 올바르게 수행됩니다.하지만 그 행을 업데이트하려고 할 때 postgres가 PRIMARY KEY 제약 조건 위반에 대한 오류를 표시합니다. 그는 이전 튜플과 동일한 기본 ID를 가진 튜플을 삽입하려고합니다 ...Postgres의 Timetravel - PRIMARY KEY 제약 조건을 위반했습니다.
데이터베이스의 모든 테이블에서 기본 키 제약 조건을 제거하는 것은 좋지 않지만 필요한 기능입니다. 그래서 당신은 timetravel에 대한 약간의 경험이 있습니까?
어떤 종류의 도움을 주시면 감사하겠습니다. 미리 감사드립니다.
DDL : GIVEN
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');
성명 :
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-337-209) –
상태 및 샘플 레코드를 제공합니다. – tuxuday