-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlad_field_blocks.sql
101 lines (90 loc) · 2.15 KB
/
lad_field_blocks.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
CREATE OR REPLACE PROCEDURE lad.field_blocks_proc(
)
LANGUAGE 'plpgsql'
AS $BODY$BEGIN
--Izveido pagaidu datu tabulu.
CREATE TEMPORARY TABLE field_blocks_tmp (
id SERIAL PRIMARY KEY
,block_number VARCHAR
,mla VARCHAR
,valid_from TIMESTAMP
,geom geometry(MultiPolygon, 3059)
);
--Pagaidu datu tabulā importē visu datu kopu no WFS.
INSERT INTO field_blocks_tmp (
block_number
,mla
,valid_from
,geom
)
SELECT block_number
,mla
,valid_from::TIMESTAMP
,ST_CurveToLine(shape)
FROM lad.lad_lauku_bloki;
CREATE INDEX field_blocks_tmp_idx ON field_blocks_tmp (block_number);
CREATE INDEX field_blocks_tmp_geom_idx ON field_blocks_tmp USING GIST (geom);
--Lauku bloki, kas vairāk neeksistē.
UPDATE lad.field_blocks
SET date_deleted = CURRENT_DATE
FROM lad.field_blocks u
LEFT JOIN field_blocks_tmp s ON u.block_number = s.block_number
WHERE s.block_number IS NULL
AND lad.field_blocks.date_deleted IS NULL
AND lad.field_blocks.id = u.id;
--Lauki, kuriem veiktas izmaiņas kopš pēdējās atjaunināšanas.
WITH b
AS (
SELECT block_number
,MAX(valid_from) valid_from_max
FROM lad.field_blocks
GROUP BY block_number
)
UPDATE lad.field_blocks
SET date_deleted = CURRENT_DATE
FROM field_blocks_tmp s
INNER JOIN b ON s.block_number = b.block_number
WHERE s.valid_from > b.valid_from_max
AND lad.field_blocks.block_number = s.block_number
AND date_deleted IS NULL;
WITH b
AS (
SELECT block_number
,MAX(valid_from) valid_from_max
FROM lad.field_blocks
GROUP BY block_number
)
INSERT INTO lad.field_blocks (
block_number
,mla
,valid_from
,geom
,date_created
)
SELECT s.block_number
,s.mla
,s.valid_from
,s.geom
,CURRENT_DATE
FROM field_blocks_tmp s
INNER JOIN b ON s.block_number = b.block_number
WHERE s.valid_from > b.valid_from_max;
--Jauni lauki.
INSERT INTO lad.field_blocks (
block_number
,mla
,valid_from
,geom
,date_created
)
SELECT s.block_number
,s.mla
,s.valid_from
,s.geom
,CURRENT_DATE
FROM lad.field_blocks u
RIGHT OUTER JOIN field_blocks_tmp s ON u.block_number = s.block_number
WHERE u.block_number IS NULL;
END;
$BODY$;
GRANT EXECUTE ON PROCEDURE lad.field_blocks_proc() TO scheduler;