나는 내 postgres 데이터베이스에 테이블을 가지고 있으며, 그 중 일부는 서로 상속합니다. 예를 들어Postgres의 시리얼 값이 2 씩 증가합니다.
:
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에 삽입을 수행 할 수 있습니다, 다음 데이터가 정말 어린이나 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 씩 증가되어 있다는 것입니다, 나는, 내 인덱스가 2로 시작하는 것을 볼 수 parent_table에 선택을하고 이동 to 4, 6, 8, 10, ... child_table에서 select를 수행하면 내 색인 (예 : 2, 8 및 10)이 표시되고 나머지는 다른 테이블에 표시됩니다.
왜 이런가요? 내가 그걸 막을 수있는 방법이 있니? 트리거는 삽입하기 전에 설정되므로 직렬이 두 번 증가하는 이유는 알 수 없습니다.
중요합니까?
미리 감사드립니다.
내 문제를 해결하는 것으로 보입니다. 내 삽입물은 이제 "INSERT INTO child_table (parent_table_id, my_col1, my_timestamp) VALUES (NEW.my_parent_id, NEW.my_col1, NEW.my_timestamp)와 같이 보입니다. 문제가 해결되었지만 이는 합법적 인 조치입니까? 자물쇠 또는 기타 이와 같은 일련의 값을 조작하여 어떤 것입니까? – cornercuttin
자식 테이블이 부모 테이블과 동일한 순서를 사용하므로 아무 문제가 없습니다 – Tometzky
아니요, 이는 법적으로 법적 조치입니다. 자식들에게 발사되는 불이행은 우연히 이어질 수 있기 때문에 원래 그렇게했습니다 .. 재미있는 것들. 제대로하지 않으면 :-) –