Última actividad 1783921378

Revisión 27359fb462eeb0afbce8fa8d8ed5debcbe86d266

에러로그테이블.sql Sin formato
1CREATE TABLE lsmd_cont_ldreg_err_log (
2 log_seq SERIAL PRIMARY KEY, -- 로그 일련번호 (자동 증가 PK)
3 log_time TIMESTAMP DEFAULT NOW(), -- 에러 기록 시간 (기본값 현재시간)
4 bad_gid INT NOT NULL, -- 에러가 발생한 연속지적도의 gid
5 err_msg TEXT -- GEOS 엔진 등이 뱉은 구체적인 에러 메시지
6);
7
8-- 추후 로그 분석 속도를 높이기 위한 인덱스 추가 (선택사항)
9CREATE INDEX idx_lsmd_cont_ldreg_err_log_gid ON lsmd_cont_ldreg_err_log(bad_gid);
연속지적도 오류필지 보정.sql Sin formato
1CREATE OR REPLACE FUNCTION update_valid_ldreg()
2RETURNS TEXT AS $$
3DECLARE
4 r RECORD;
5 v_err_count INT := 0;
6 v_succ_count INT := 0;
7 v_skip_count INT := 0;
8BEGIN
9
10 -- 테이블(lsmd_cont_ldreg)의 모든 데이터를 gid 기준으로 순회
11 FOR r IN SELECT gid, geom FROM lsmd_cont_ldreg WHERE geom IS NOT NULL LOOP
12 BEGIN
13 -- [조건 추가] 기하 구조가 유효하지 않은(FALSE) 오류 데이터만 조준해서 업데이트
14 IF ST_IsValid(r.geom) = FALSE THEN
15 UPDATE lsmd_cont_ldreg
16 SET geom = ST_Multi(ST_CollectionExtract(ST_MakeValid(r.geom), 3))
17 WHERE gid = r.gid;
18
19 v_succ_count := v_succ_count + 1;
20 ELSE
21 -- 이미 정상인 데이터는 아무 작업 없이 그냥 넘어감 (속도 향상의 핵심)
22 v_skip_count := v_skip_count + 1;
23 END IF;
24
25 EXCEPTION WHEN OTHERS THEN
26 -- ST_IsValid 검사나 UPDATE 도중 GEOS 에러가 터지면 로그를 남기고 패스
27 INSERT INTO lsmd_cont_ldreg_err_log (bad_gid, err_msg)
28 VALUES (r.gid, SQLERRM);
29
30 v_err_count := v_err_count + 1;
31 END;
32 END LOOP;
33
34 -- 최종 결과를 텍스트로 반환
35 RETURN '업데이트 완료! (수정성공: ' || v_succ_count || '건 / 정상패스: ' || v_skip_count || '건 / 에러로 건너뛴 필지: ' || v_err_count || '건)';
36END;
37$$ LANGUAGE plpgsql;