2017-12-26 9 views
0

테이블 이름이 Locations입니다. 열은 [ID, GUID_ID, NAME, GEOMETRY]입니다. 삽입 된 행 뒤에 GUID_ID 열을 업데이트하려고합니다. 그래서 나는 이것을 할 방아쇠를 만들 것입니다.PostgreSQL은 행을 업데이트하는 저장 프로 시저를 만듭니다.

CREATE TRIGGER update_id 
    AFTER INSERT ON Locations 
    ?? (How can Update GUID_ID column as uuid_generate_v4()) 

이 열에 대한 기본값을 설정했습니다. 그러나 QGIS와 같은 타사 응용 프로그램은 동시에 수천 개의 형상 레코드를 삽입합니다. 따라서 기본값은 모든 열을 채우지 않습니다. 그들은 null입니다. 그래서 솔루션을위한 방아쇠가 필요합니다.

답변

0

필자가 필드의 기본값을 정의한 경우 QGIS 레코드가 얼마나 입력 됐는지 생각합니다. QGIS가 빈 공간을 대신 입력하고있을 수 있습니다. 필드 정의에 "NOT NULL"제약 조건을 추가 할 수도 있습니다. 그러나 이와 같이 트리거를 사용할 수 있습니다. 그래도 삽입하기 전에 GUID_ID 값을 설정합니다.

CREATE TRIGGER update_id 
    BEFORE INSERT ON Locations 
    FOR EACH ROW EXECUTE PROCEDURE fn_trgr(); 

CREATE OR REPLACE FUNCTION fn_trgr() RETURNS TRIGGER AS $$ 
BEGIN 
    IF pg_trigger_depth() <> 1 THEN 
     RETURN NEW; 
    END IF; 
    NEW.GUID_ID = uuid_generate_v4(); -- or whatever value you wants to set 
    RETURN NEW; 

END; 
$$ LANGUAGE plpgsql; 
+0

삽입 된 행만 업데이트합니다. qgis는 null GUID_ID 필드로 보냈습니다. – barteloma

+0

그런 다음 DDL 열의 "NOT NULL"제약 조건을 추가하십시오. –

+0

GUID_ID 열의 존재 여부는 어떻게 확인할 수 있습니까? – barteloma