2012-09-10 2 views
11

나는 awards라는 테이블이 있습니다. 테이블 어워드의 각 삽입이 다른 테이블을 업데이트하는 PostgreSQL에서 트리거를 어떻게 마운트 할 수 있습니까?트리거를 삽입하여 PostgreSQL을 사용하여 다른 테이블 업데이트

+1

는 일부 MOR을 제공 할 수있는 트리거 기능 만들기 전자 세부 사항? 이 "다른 테이블"은 하나의 별개의 테이블 또는 상금의 일부 필드 값에 기반한 여러 개의 테이블입니까? – jcater

+2

http://www.postgresql.org/docs/8.1/static/triggers.html – ertx

+2

@ertx /8.1/doc 대신/current/doc에 링크하는 것이 더 좋습니다. –

답변

4

documenation for PL/PgSQL triggers을 원하면이 경우에 대해서만 설명하십시오. 일반 documentation on triggers도 유용 할 수 있습니다.

BEFORE 또는 AFTER 트리거를 사용할 수 있습니다. 그래도 AFTER 트리거를 사용하여 트리거가 삽입되는 행의 최종 버전을 보았습니다. 물론 FOR EACH ROW을 원합니다.

+0

안녕하세요. @Craig Ringer는 일괄 삽입을 위해 FOR EACH ROW의 목적입니까? – rosenthal

+1

@rosenthal 응? 'FOR EACH STATEMENT' 트리거는'NEW' 행에 접근 할 수 없습니다. 그래서 만약 당신이 단 한 줄의 INSERT를하고 있었다고해서 이것에 도움이되지는 않을 것입니다. –

+0

나는 그 말을하지 않았다. 나의 가난한 선택을 용서했다. 나는 각각의 행이 무엇을 의미합니까? Postgres의 설명서를보고 지금 이해합니다. "FOR EACH ROW로 표시된 트리거는 연산이 수정하는 모든 행에 대해 한 번 호출됩니다." – rosenthal

25

는 여기에서 우리는 table1table2라는 두 개의 테이블이있다. 트리거를 사용하여 table1에 삽입하면 table2을 업데이트합니다.

테이블

CREATE TABLE table1 
(
    id integer NOT NULL, 
    name character varying, 
    CONSTRAINT table1_pkey PRIMARY KEY (id) 
) 

CREATE TABLE table2 
(
    id integer NOT NULL, 
    name character varying 
) 

CREATE OR REPLACE FUNCTION function_copy() RETURNS TRIGGER AS 
$BODY$ 
BEGIN 
    INSERT INTO 
     table2(id,name) 
     VALUES(new.id,new.name); 

      RETURN new; 
END; 
$BODY$ 
language plpgsql; 

이 트리거가

CREATE TRIGGER trig_copy 
    AFTER INSERT ON table1 
    FOR EACH ROW 
    EXECUTE PROCEDURE function_copy(); 
+0

트리거 함수에서 테이블 1의 값을 삽입하는 방법을 아는 방법은 무엇입니까? "values ​​(new.id, new.name)"다음에 "from table1"을 쓸 필요가 없습니까? –

관련 문제