DatabaseCreation: DML.sql

File DML.sql, 26.6 KB (added by 231069, 6 days ago)
Line 
1-------------------------------------------------------------------------------------------------------
2--DML ZA GENERIRANJE PODATOCI
3INSERT INTO Kategorija (kod) VALUES
4('AM'),
5('A1'),
6('A2'),
7('A'),
8('B'),
9('C1'),
10('C'),
11('D1'),
12('D'),
13('BE'),
14('C1E'),
15('CE'),
16('D1E'),
17('DE'),
18('F'),
19('G');
20---------------------------------------------------------------------------------
21
22--Polnenje Gragjanin
23
24CREATE TABLE IF NOT EXISTS temp_maski_iminja (id BIGSERIAL PRIMARY KEY);
25CREATE TABLE IF NOT EXISTS temp_zenski_iminja (id BIGSERIAL PRIMARY KEY);
26CREATE TABLE IF NOT EXISTS temp_maski_preziminja (id BIGSERIAL PRIMARY KEY);
27CREATE TABLE IF NOT EXISTS temp_zenski_preziminja (id BIGSERIAL PRIMARY KEY);
28CREATE TABLE IF NOT EXISTS temp_adresi (id BIGSERIAL PRIMARY KEY);
29
30
31CREATE TEMP TABLE t_m_ime AS SELECT name as ime, row_number() over() as rn FROM temp_maski_iminja;
32CREATE TEMP TABLE t_m_prez AS SELECT surname as prezime, row_number() over() as rn FROM temp_maski_preziminja;
33CREATE TEMP TABLE t_z_ime AS SELECT name as ime, row_number() over() as rn FROM temp_zenski_iminja;
34CREATE TEMP TABLE t_z_prez AS SELECT surname_female as prezime, row_number() over() as rn FROM temp_zenski_preziminja;
35CREATE TEMP TABLE t_adr AS SELECT adresa, row_number() over() as rn FROM temp_adresi;
36
37
38CREATE TEMP TABLE t_broj AS
39SELECT
40 (SELECT count(*) FROM t_m_ime) as c_m_ime,
41 (SELECT count(*) FROM t_m_prez) as c_m_prez,
42 (SELECT count(*) FROM t_z_ime) as c_z_ime,
43 (SELECT count(*) FROM t_z_prez) as c_z_prez,
44 (SELECT count(*) FROM t_adr) as c_adr;
45
46
47
48
49INSERT INTO Gragjanin (EMBG, ime, prezime, pol, adresa, datum_ragjanje)
50SELECT
51
52 (
53 to_char(g.d, 'DD') || -- DD
54 to_char(g.d, 'MM') || -- MM
55 right(to_char(g.d, 'YYYY'), 3) || -- YYY
56 (floor(random() * 9) + 41)::TEXT || -- RR (41 до 49)
57 '5' || -- G (5 за женски)
58 lpad(floor(random() * 100)::TEXT, 2, '0') || -- NN (00 до 99)
59 floor(random() * 10)::TEXT -- C (0 до 9)
60 )::CHAR(13) as EMBG,
61 i.ime,
62 p.prezime,
63 'F',
64 a.adresa,
65 g.d
66FROM (
67 SELECT
68 gs.broj,
69 (CURRENT_DATE - INTERVAL '18 years' - (random() * INTERVAL '52 years'))::DATE as d
70 FROM generate_series(1, 1000000) gs(broj)
71) g
72CROSS JOIN t_broj b
73JOIN t_z_ime i ON i.rn = (g.broj % b.c_z_ime) + 1
74JOIN t_z_prez p ON p.rn = ((g.broj * 3) % b.c_z_prez) + 1
75JOIN t_adr a ON a.rn = ((g.broj * 7) % b.c_adr) + 1
76ON CONFLICT (EMBG) DO NOTHING;
77
78
79DROP TABLE t_m_ime;
80DROP TABLE t_m_prez;
81DROP TABLE t_z_ime;
82DROP TABLE t_z_prez;
83DROP TABLE t_adr;
84DROP TABLE t_broj;
85
86DROP TABLE IF EXISTS temp_maski_iminja;
87DROP TABLE IF EXISTS temp_zenski_iminja;
88DROP TABLE IF EXISTS temp_maski_preziminja;
89DROP TABLE IF EXISTS temp_zenski_preziminja;
90DROP TABLE IF EXISTS temp_adresi;
91select * from gragjanin;
92
93------------------------------------------------------------------------------------------------
94--Polnenje policaec
95
96CREATE TEMP TABLE tmp_sefovi AS
97SELECT EMBG, row_number() over() - 1 as rn
98FROM Gragjanin
99WHERE datum_ragjanje < (CURRENT_DATE - INTERVAL '30 years')
100LIMIT 500;
101
102
103CREATE TEMP TABLE tmp_obicni AS
104SELECT EMBG, row_number() over() - 1 as rn
105FROM Gragjanin
106WHERE datum_ragjanje < (CURRENT_DATE - INTERVAL '21 years')
107 AND EMBG NOT IN (SELECT EMBG FROM tmp_sefovi)
108LIMIT 9500;
109
110
111INSERT INTO Policaec (EMBG_P, broj_na_znacka, EMBG_nadreden)
112SELECT
113 EMBG,
114 'ZN-S-' || LPAD((rn + 1)::text, 4, '0'),
115 NULL
116FROM tmp_sefovi;
117
118
119INSERT INTO Policaec (EMBG_P, broj_na_znacka, EMBG_nadreden)
120SELECT
121 o.EMBG,
122 'ZN-' || LPAD((o.rn + 1)::text, 6, '0'),
123 s.EMBG
124FROM tmp_obicni o
125JOIN tmp_sefovi s ON s.rn = (o.rn % 500);
126
127
128DROP TABLE tmp_sefovi;
129DROP TABLE tmp_obicni;
130
131-------------------------------------------------------------------------
132
133-- Polnenje sektor
134INSERT INTO Sektor (id_sektor, ime, region, telefon) VALUES
135(1, 'SVR Skopje', 'Skopski', '+38923111111'),
136(2, 'SVR Bitola', 'Pelagoniski', '+38947222222'),
137(3, 'SVR Kumanovo', 'Severoistocen', '+38931333333'),
138(4, 'SVR Shtip', 'Istocen', '+38932444444'),
139(5, 'SVR Tetovo', 'Pologski', '+38944555555'),
140(6, 'SVR Ohrid', 'Jugozapaden', '+38946666666'),
141(7, 'SVR Veles', 'Vardarski', '+38943777777'),
142(8, 'SVR Strumica', 'Jugoistocen', '+38934888888');
143
144-- Polnenje stanica
145INSERT INTO Stanica (ime, adresa, id_sektor) VALUES
146('PS Centar', 'ul. Goce Delcev br. 2, Skopje', 1),
147('PS Karposh', 'ul. Partizanski odredi br. 80, Skopje', 1),
148('PS Bit Pazar', 'ul. Krste Misirkov br. 1, Skopje', 1),
149('PS Bitola 1', 'ul. Shirok Sokak br. 100, Bitola', 2),
150('PS Prilep', 'ul. Mirce Acev br. 45, Prilep', 2),
151('PS Resen', 'ul. 29-ti Noemvri br. 5, Resen', 2),
152('PS Kumanovo', 'ul. 11-ti Oktomvri br. 1, Kumanovo', 3),
153('PS Kriva Palanka', 'ul. Marsal Tito br. 88, Kriva Palanka', 3),
154('PS Shtip', 'ul. Vanco Prke br. 30, Shtip', 4),
155('PS Kocani', 'ul. Marsal Tito br. 12, Kocani', 4),
156('PS Tetovo', 'ul. Ilindenska br. 10, Tetovo', 5),
157('PS Gostivar', 'ul. JNA br. 2, Gostivar', 5),
158('PS Ohrid', 'ul. Partizanska br. 1, Ohrid', 6),
159('PS Struga', 'ul. Marshal Tito br. 15, Struga', 6),
160('PS Kicevo', 'ul. Boris Kidric br. 4, Kicevo', 6),
161('PS Veles', 'ul. 8-mi Septemvri br. 22, Veles', 7),
162('PS Kavadarci', 'ul. Ilindenska br. 55, Kavadarci', 7),
163('PS Negotino', 'ul. Marsal Tito br. 10, Negotino', 7),
164('PS Strumica', 'ul. Leninova br. 4, Strumica', 8),
165('PS Gevgelija', 'ul. 7-mi Noemvri br. 2, Gevgelija', 8);
166
167CREATE TEMP TABLE temp_lokacii AS
168SELECT
169 g.EMBG,
170 split_part(g.adresa, ' ', array_length(string_to_array(g.adresa, ' '), 1)) as grad
171FROM Gragjanin g
172JOIN Policaec p ON g.EMBG = p.EMBG_P;
173
174
175INSERT INTO Raboti_vo (EMBG_P, id_stanica, datum_od)
176SELECT
177 tl.EMBG,
178 COALESCE(
179
180 (SELECT s.id_stanica
181 FROM Stanica s
182 WHERE split_part(s.adresa, ' ', array_length(string_to_array(s.adresa, ' '), 1)) = tl.grad
183 LIMIT 1),
184
185
186 (SELECT id_stanica
187 FROM Stanica
188 ORDER BY RANDOM()
189 LIMIT 1)
190 ) as id_stanica,
191 (CURRENT_DATE - INTERVAL '1 year' * floor(random() * 15 + 1))::DATE as d_od
192FROM temp_lokacii tl
193ON CONFLICT DO NOTHING;
194
195
196UPDATE Raboti_vo
197SET datum_do = datum_od + (random() * (CURRENT_DATE - datum_od))::int
198WHERE EMBG_P IN (
199 SELECT EMBG_P
200 FROM Raboti_vo
201 WHERE datum_do IS NULL
202 ORDER BY RANDOM()
203 LIMIT 1500
204);
205
206
207DROP TABLE temp_lokacii;
208---- update za policajci da imaat soodvetni sefovi
209
210WITH segashni_rabotni_mesta AS (
211 SELECT EMBG_P, id_stanica
212 FROM Raboti_vo
213 WHERE datum_do IS NULL
214),
215sefovi_po_stanica AS (
216 SELECT
217 rm.id_stanica,
218 array_agg(p.EMBG_P) as sefovi_niza,
219 count(*) as vkupno_sefovi
220 FROM Policaec p
221 JOIN segashni_rabotni_mesta rm ON p.EMBG_P = rm.EMBG_P
222 WHERE p.EMBG_nadreden IS NULL
223 GROUP BY rm.id_stanica
224)
225UPDATE Policaec p
226SET EMBG_nadreden = sps.sefovi_niza[floor(random() * sps.vkupno_sefovi) + 1]
227FROM segashni_rabotni_mesta rm
228JOIN sefovi_po_stanica sps ON rm.id_stanica = sps.id_stanica
229WHERE p.EMBG_P = rm.EMBG_P
230 AND p.EMBG_nadreden IS NOT NULL;
231
232-----------------------------------------------------------------------------
233---polnenje na vozilo
234
235INSERT INTO Vozilo (broj_na_sasija, model, id_kategorija)
236SELECT
237 upper(substring(md5(rand.i::text || rand.sasija_rand::text) from 1 for 17)),
238 CASE k.kat_id
239 WHEN 1 THEN (ARRAY['Tomos APN 6', 'Piaggio Zip 50', 'Peugeot Kisbee 50', 'Aprilia SR 50', 'Kymco Agility 50'])[floor(random()*5)+1]
240 WHEN 2 THEN (ARRAY['Yamaha MT-125', 'Honda CB125R', 'KTM 125 Duke', 'Aprilia RS 125'])[floor(random()*4)+1]
241 WHEN 3 THEN (ARRAY['Honda CB500F', 'Kawasaki Z400', 'Yamaha MT-03', 'KTM 390 Duke'])[floor(random()*4)+1]
242 WHEN 4 THEN (ARRAY['Yamaha MT-09', 'Kawasaki Z900', 'Honda CBR1000RR', 'BMW R 1250 GS', 'Suzuki Hayabusa'])[floor(random()*5)+1]
243 WHEN 5 THEN (ARRAY['VW Golf', 'Skoda Octavia', 'Opel Astra', 'Toyota Corolla', 'Renault Clio', 'Ford Focus', 'BMW 320d', 'Audi A4'])[floor(random()*8)+1]
244 WHEN 6 THEN (ARRAY['Iveco Daily', 'Mercedes Sprinter', 'Ford Transit', 'Fiat Ducato Maxi'])[floor(random()*4)+1]
245 WHEN 7 THEN (ARRAY['MAN TGS', 'Mercedes Actros', 'Volvo FH', 'Scania R-series', 'DAF XF'])[floor(random()*5)+1]
246 WHEN 8 THEN (ARRAY['Mercedes Sprinter Minibus', 'Ford Transit Minibus', 'Iveco Daily Minibus'])[floor(random()*3)+1]
247 WHEN 9 THEN (ARRAY['Mercedes Tourismo', 'Setra S 415', 'Neoplan Tourliner', 'MAN Lion''s Coach'])[floor(random()*4)+1]
248 WHEN 10 THEN (ARRAY['VW Touareg', 'Jeep Grand Cherokee', 'Toyota Hilux'])[floor(random()*3)+1]
249 WHEN 11 THEN (ARRAY['Iveco Daily Prikolica', 'Mercedes Sprinter Prikolica'])[floor(random()*2)+1]
250 WHEN 12 THEN (ARRAY['MAN TGX Poluprikolka', 'Volvo FH16 Prikolka', 'Scania S500 Prikolka'])[floor(random()*3)+1]
251 WHEN 13 THEN (ARRAY['Mercedes Minibus Prikolica', 'Ford Transit Prikolica'])[floor(random()*2)+1]
252 WHEN 14 THEN (ARRAY['Setra S 531 DT', 'Mercedes Travego Prikolica'])[floor(random()*2)+1]
253 WHEN 15 THEN (ARRAY['John Deere 5075', 'IMT 539', 'Massey Ferguson 5700', 'Zetor', 'New Holland T4'])[floor(random()*5)+1]
254 WHEN 16 THEN (ARRAY['Caterpillar 428', 'JCB 3CX', 'Bobcat S130', 'Komatsu Bager', 'IMT 506'])[floor(random()*5)+1]
255 END,
256 k.kat_id
257FROM (
258 SELECT
259 gs.i,
260 random() as r,
261 random() as sasija_rand
262 FROM generate_series(1, 1000000) gs(i)
263) rand
264CROSS JOIN LATERAL (
265 SELECT CASE
266 WHEN rand.r < 0.70 THEN 5
267 WHEN rand.r < 0.72 THEN 1
268 WHEN rand.r < 0.74 THEN 2
269 WHEN rand.r < 0.76 THEN 3
270 WHEN rand.r < 0.78 THEN 4
271 WHEN rand.r < 0.81 THEN 15
272 WHEN rand.r < 0.83 THEN 16
273 WHEN rand.r < 0.85 THEN 6
274 WHEN rand.r < 0.89 THEN 7
275 WHEN rand.r < 0.91 THEN 11
276 WHEN rand.r < 0.94 THEN 12
277 WHEN rand.r < 0.95 THEN 8
278 WHEN rand.r < 0.97 THEN 9
279 WHEN rand.r < 0.98 THEN 13
280 WHEN rand.r < 0.99 THEN 14
281 ELSE 10
282 END as kat_id
283) k
284ON CONFLICT (broj_na_sasija) DO NOTHING;
285-----------------------------------------------------------------------------
286--polnenje na boja_vozilo
287CREATE TABLE Katalog_Boi (
288 ime_boja varchar(30) PRIMARY KEY
289);
290WITH dostapni_boi AS (
291 SELECT array_agg(ime_boja) as boi_niza, count(*) as vkupno
292 FROM Katalog_Boi
293)
294INSERT INTO Boja_vozilo (broj_na_sasija, boja)
295SELECT
296 v.broj_na_sasija,
297 db.boi_niza[floor(random() * db.vkupno) + 1]
298FROM Vozilo v
299CROSS JOIN dostapni_boi db
300ON CONFLICT DO NOTHING;
301
302WITH dostapni_boi AS (
303 SELECT array_agg(ime_boja) as boi_niza, count(*) as vkupno
304 FROM Katalog_Boi
305)
306INSERT INTO Boja_vozilo (broj_na_sasija, boja)
307SELECT
308 v.broj_na_sasija,
309 db.boi_niza[floor(random() * db.vkupno) + 1]
310FROM Vozilo v
311CROSS JOIN dostapni_boi db
312WHERE random() < 0.15
313ON CONFLICT DO NOTHING;
314
315DROP TABLE Katalog_Boi;
316-------------------------------------------------------------------------
317-- polnenje Vozacka_dozvola
318INSERT INTO Vozacka_dozvola (broj_dozvola, datum_izdavanje, datum_vaznost_do, EMBG)
319SELECT
320 chr(floor(random() * 26 + 65)::int) || lpad(floor(random() * 9999999)::text, 7, '0') AS broj_dozvola,
321 g.izdadena_na_datum AS datum_izdavanje,
322 (g.izdadena_na_datum + INTERVAL '10 years')::date AS datum_vaznost_do,
323 g.EMBG
324FROM (
325 SELECT
326 EMBG,
327 CASE
328 WHEN datum_ragjanje > (CURRENT_DATE - INTERVAL '38 years')::DATE THEN
329 (datum_ragjanje + INTERVAL '18 years')::DATE + (random() * (CURRENT_DATE - (datum_ragjanje + INTERVAL '18 years')::DATE))::INT
330 ELSE
331 CURRENT_DATE - (random() * 7300)::INT
332 END AS izdadena_na_datum
333 FROM Gragjanin
334 WHERE datum_ragjanje < (CURRENT_DATE - INTERVAL '18 years')
335 AND random() < 0.65
336) g
337ON CONFLICT (broj_dozvola) DO NOTHING;
338
339select * from vozacka_dozvola vd
340------------------------------------------------------------------------------------------
341--polnenje na kategorija vozacka dozvola
342INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje)
343SELECT
344 CASE WHEN random() < 0.90 THEN 5 ELSE 4 END,
345 broj_dozvola,
346 datum_izdavanje - (random() * 30 + 1)::INT
347FROM Vozacka_dozvola;
348
349INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje)
350SELECT
351 4, broj_dozvola, datum_izdavanje - (random() * 60 + 1)::INT
352FROM Vozacka_dozvola
353WHERE random() < 0.15
354ON CONFLICT DO NOTHING;
355
356INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje)
357SELECT
358 7, broj_dozvola, datum_izdavanje - (random() * 100 + 1)::INT
359FROM Vozacka_dozvola
360WHERE random() < 0.10
361ON CONFLICT DO NOTHING;
362
363INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje)
364SELECT
365 12, broj_dozvola, datum_izdavanje - (random() * 10 + 1)::INT
366FROM Vozacka_dozvola
367WHERE random() < 0.05
368ON CONFLICT DO NOTHING;
369
370INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje)
371SELECT
372 9, broj_dozvola, datum_izdavanje - (random() * 100 + 1)::INT
373FROM Vozacka_dozvola
374WHERE random() < 0.03
375ON CONFLICT DO NOTHING;
376
377INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje)
378SELECT
379 15, broj_dozvola, datum_izdavanje - (random() * 300 + 1)::INT
380FROM Vozacka_dozvola
381WHERE random() < 0.08
382ON CONFLICT DO NOTHING;
383
384select * from kategorija_vozacka_dozvola kvd
385
386------------------------------------------------------------------------------
387--polnjenje na Registracija
388CREATE TEMP TABLE tmp_sopstvenici AS
389SELECT
390 s.EMBG,
391 v.broj_na_sasija,
392 --
393 split_part(s.adresa, ' ', array_length(string_to_array(s.adresa, ' '), 1)) as grad,
394 (CURRENT_DATE - (random() * 365)::INT) as bazen_datum
395FROM (
396 SELECT broj_na_sasija, row_number() over() as rn
397 FROM Vozilo
398) v
399JOIN (
400 SELECT EMBG, adresa, row_number() over() as rn
401 FROM Gragjanin
402 WHERE datum_ragjanje < (CURRENT_DATE - INTERVAL '18 years')
403 LIMIT 1000000
404) s ON v.rn = s.rn;
405
406
407INSERT INTO Registracija (EMBG, broj_na_sasija, datum_na_izvadanje, datum_na_istekuvanje, registerska_tablica)
408SELECT
409 EMBG,
410 broj_na_sasija,
411 (bazen_datum - (godina || ' years')::INTERVAL)::DATE,
412 (bazen_datum - ((godina - 1) || ' years')::INTERVAL)::DATE,
413
414 COALESCE(
415 CASE
416 WHEN grad IN ('Skopje', 'Skopje,') THEN 'SK'
417 WHEN grad IN ('Bitola', 'Bitola,') THEN 'BT'
418 WHEN grad IN ('Kumanovo', 'Kumanovo,') THEN 'KU'
419 WHEN grad IN ('Tetovo', 'Tetovo,') THEN 'TE'
420 WHEN grad IN ('Ohrid', 'Ohrid,') THEN 'OH'
421 WHEN grad IN ('Shtip', 'Shtip,') THEN 'ST'
422 WHEN grad IN ('Veles', 'Veles,') THEN 'VE'
423 WHEN grad IN ('Prilep', 'Prilep,') THEN 'PP'
424 WHEN grad IN ('Kocani', 'Kocani,') THEN 'KO'
425 WHEN grad IN ('Gostivar', 'Gostivar,') THEN 'GV'
426 WHEN grad IN ('Gevgelija', 'Gevgelija,') THEN 'GE'
427 WHEN grad IN ('Strumica', 'Strumica,') THEN 'SR'
428
429 ELSE (ARRAY['SK','BT','KU','TE','OH','ST','VE','PP','KO','GV','GE','SR'])[floor(random()*12)+1]
430 END, 'SK'
431 ) || '-' ||
432 lpad(floor(random()*9999)::text, 4, '0') || '-' ||
433 chr((random()*25+65)::int) || chr((random()*25+65)::int) as tablica
434FROM tmp_sopstvenici
435CROSS JOIN LATERAL generate_series(0, 2) as godina;
436
437
438DROP TABLE tmp_sopstvenici;
439
440select * from registracija r
441-----------------------------------------------------------------
442--polnenje na Slucaj
443
444CREATE TABLE Tip_Nastan (
445 ime varchar(100) PRIMARY KEY
446);
447
448CREATE TABLE Tip_Zadaca (
449 opis varchar(255) PRIMARY KEY
450);
451
452
453
454
455WITH dostapni_nastani AS (
456 SELECT array_agg(ime) as n_arr, count(*) as n_cnt
457 FROM Tip_Nastan
458)
459INSERT INTO Slucaj (datum_otvaranje, status, tip_nastan)
460SELECT
461 datum,
462 CASE
463 WHEN datum < CURRENT_DATE - INTERVAL '6 months' THEN
464 CASE WHEN random() < 0.95 THEN 'Zatvoren' ELSE 'Vo tek' END
465 ELSE
466 CASE
467 WHEN random() < 0.4 THEN 'Otvoren'
468 WHEN random() < 0.8 THEN 'Vo tek'
469 ELSE 'Zatvoren'
470 END
471 END,
472 dn.n_arr[floor(random() * dn.n_cnt) + 1]
473FROM (
474 SELECT (CURRENT_DATE - (random() * 1825)::INT) as datum
475 FROM generate_series(1, 1000000)
476) d
477CROSS JOIN dostapni_nastani dn;
478
479------------------------------------------------------------------
480--polenje na Zadaca
481
482WITH policaici AS (
483 SELECT array_agg(EMBG_P) as p_arr, count(*) as p_cnt
484 FROM Policaec
485),
486dostapni_zadaci AS (
487 SELECT array_agg(opis) as z_arr, count(*) as z_cnt
488 FROM Tip_Zadaca
489)
490INSERT INTO Zadaca (opis, status, EMBG_policaec, id_slucaj)
491SELECT
492
493 dz.z_arr[(((s.id_slucaj + serija.broj) % dz.z_cnt) + 1)::INT],
494
495
496 CASE
497 WHEN s.status = 'Zatvoren' THEN
498 CASE WHEN random() < 0.85 THEN 'Zavrsena' ELSE 'Otkazana' END
499 WHEN s.status = 'Otvoren' THEN
500 CASE WHEN random() < 0.90 THEN 'Aktivna' ELSE 'Zavrsena' END
501 WHEN s.status = 'Vo tek' THEN
502 CASE
503 WHEN random() < 0.40 THEN 'Zavrsena'
504 WHEN random() < 0.80 THEN 'Aktivna'
505 ELSE 'Otkazana'
506 END
507 END,
508
509 p.p_arr[floor(random() * p.p_cnt) + 1],
510 s.id_slucaj
511FROM Slucaj s
512CROSS JOIN policaici p
513CROSS JOIN dostapni_zadaci dz
514
515CROSS JOIN LATERAL generate_series(1, (floor(random() * 3) + 3)::INT) AS serija(broj);
516
517
518----------------------------------------------------------------------------------------
519
520
521
522
523
524
525
526
527
528----------------------------------------------------------------------------------------------------------
529--25.04
530
531
532---------polnenje na zapisnik
533
534CREATE TEMP TABLE tmp_v AS SELECT broj_na_sasija, row_number() over() - 1 as rn FROM Vozilo;
535CREATE TEMP TABLE tmp_g AS SELECT EMBG, row_number() over() - 1 as rn FROM Gragjanin WHERE datum_ragjanje < (CURRENT_DATE - INTERVAL '18 years');
536
537
538CREATE TEMP TABLE tmp_p AS
539SELECT
540 rv.EMBG_P,
541 row_number() over() - 1 as rn,
542 CASE s.ime
543 WHEN 'PS Centar' THEN ARRAY['Bulevar Partizanski Odredi', 'Ulica Makedonija', 'Dimitrije Cupovski', '11-ti Oktomvri']
544 WHEN 'PS Karposh' THEN ARRAY['Bulevar Ilinden', 'Ulica Ruzveltova', 'Bulevar 8-mi Septemvri', 'Moskovska']
545 WHEN 'PS Bit Pazar' THEN ARRAY['Bulevar Krste Misirkov', 'Ulica Cvetan Dimov', 'Plasticharska', 'Nikola Karev']
546 WHEN 'PS Bitola 1' THEN ARRAY['Shirok Sokak', 'Bulevar 1-vi Maj', 'Ulica Prilepska', 'Partizanska']
547 WHEN 'PS Prilep' THEN ARRAY['Bulevar Goce Delcev', 'Ulica Prilepski Braniteli', 'Aleksandar Makedonski']
548 WHEN 'PS Kumanovo' THEN ARRAY['Treta Makedonska Udarna Brigada', '11-ti Oktomvri', 'Oktomvriska Revolucija']
549 WHEN 'PS Tetovo' THEN ARRAY['Bulevar Ilindenska', 'Bulevar Vidoe Smilevski-Bato', 'Blagoja Toska']
550 WHEN 'PS Ohrid' THEN ARRAY['Bulevar Turisticka', 'Ulica Partizanska', 'Kej Makedonija', 'Jane Sandanski']
551 WHEN 'PS Shtip' THEN ARRAY['Ulica Vanco Prke', 'Bulevar Goce Delcev', 'Zeleznicka']
552 WHEN 'PS Veles' THEN ARRAY['Ulica 8-mi Septemvri', 'Ulica Blagoj Gjorev', 'Alekso Demnievski']
553 WHEN 'PS Strumica' THEN ARRAY['Bulevar Leninova', 'Blagoj Jankov Mucheto', 'Marshal Tito']
554 WHEN 'PS Gostivar' THEN ARRAY['Bulevar Bratsva i Edinstva', 'Ulica JNA', 'Ilindenska']
555 WHEN 'PS Kocani' THEN ARRAY['Marsal Tito', 'Teodosija Paunov', 'Dimitar Vlahov']
556 WHEN 'PS Kavadarci' THEN ARRAY['Ilindenska', '7-mi Septemvri', 'Meto Dija']
557 WHEN 'PS Gevgelija' THEN ARRAY['7-mi Noemvri', 'Sava Mihajlov', 'Zeleznicka']
558 ELSE ARRAY['Glavna Ulica', 'Bulevar Osloboduvanje', 'Ulica Marsal Tito', 'Lokalni Patishta']
559 END as dostapni_ulici
560FROM Raboti_vo rv
561JOIN Stanica s ON rv.id_stanica = s.id_stanica
562WHERE rv.datum_do IS NULL;
563
564
565CREATE TEMP TABLE tmp_c AS
566SELECT
567 (SELECT count(*) FROM tmp_v) as cv,
568 (SELECT count(*) FROM tmp_g) as cg,
569 (SELECT count(*) FROM tmp_p) as cp;
570
571
572INSERT INTO Zapisnik (vreme, datum, lokacija, Potpis, id_slucaj, Vozilo_Broj_Sasija, EMBG_Prekrsuvach, EMBG_Policaec)
573SELECT
574 (TIME '00:00:00' + random() * (TIME '23:59:59' - TIME '00:00:00'))::time as vreme,
575 s.datum_otvaranje as datum,
576 p.dostapni_ulici[floor(random() * array_length(p.dostapni_ulici, 1)) + 1] as lokacija,
577 random() < 0.85 as Potpis,
578 s.id_slucaj,
579 v.broj_na_sasija,
580 g.EMBG,
581 p.EMBG_P
582FROM (
583 SELECT id_slucaj, datum_otvaranje, row_number() over() - 1 as rn
584 FROM Slucaj
585 CROSS JOIN generate_series(1, 15)
586 LIMIT 10000000
587) s
588CROSS JOIN tmp_c c
589JOIN tmp_v v ON v.rn = (s.rn % c.cv)
590JOIN tmp_g g ON g.rn = (s.rn % c.cg)
591JOIN tmp_p p ON p.rn = (s.rn % c.cp);
592
593
594DROP TABLE tmp_v;
595DROP TABLE tmp_g;
596DROP TABLE tmp_p;
597DROP TABLE tmp_c;
598
599
600
601
602---update na zapisnik za razlicen broj na zapisnici po policaec
603
604
605
606DROP TABLE IF EXISTS tmp_pool_rabota;
607CREATE TEMP TABLE tmp_pool_rabota AS
608SELECT
609 rv.EMBG_P,
610 rv.datum_od,
611 COALESCE(rv.datum_do, CURRENT_DATE) AS datum_do,
612 trim(split_part(s.adresa, ',', 2)) AS grad,
613 GREATEST(1, (power(random(), 4) * 30 + 1)::INT) AS tezina
614FROM Raboti_vo rv
615JOIN Stanica s ON rv.id_stanica = s.id_stanica;
616
617
618DROP TABLE IF EXISTS tmp_zap_grad;
619CREATE TEMP TABLE tmp_zap_grad AS
620SELECT
621 z.id_na_zapisnik,
622 trim(split_part(s.adresa, ',', 2)) AS grad
623FROM Zapisnik z
624JOIN Raboti_vo rv ON rv.EMBG_P = z.EMBG_Policaec
625 AND z.datum BETWEEN rv.datum_od AND COALESCE(rv.datum_do, CURRENT_DATE)
626JOIN Stanica s ON rv.id_stanica = s.id_stanica;
627
628
629UPDATE Zapisnik z
630SET EMBG_Policaec = (
631 SELECT pr.EMBG_P
632 FROM tmp_pool_rabota pr, tmp_zap_grad tz
633 WHERE tz.id_na_zapisnik = z.id_na_zapisnik
634 AND pr.grad = tz.grad
635 AND z.datum BETWEEN pr.datum_od AND pr.datum_do
636 ORDER BY -ln(1.0 - random()) / pr.tezina
637 LIMIT 1
638);
639
640DROP TABLE tmp_pool_rabota;
641DROP TABLE tmp_zap_grad;
642
643select * from tmp_zap_grad
644
645
646
647
648
649---------------------------------------------------------------------------
650----dodavanje na 2 000 000 registracii po proverka
651
652CREATE TEMP TABLE tmp_v2 AS SELECT broj_na_sasija, row_number() over() - 1 as rn FROM Vozilo LIMIT 1000000;
653CREATE TEMP TABLE tmp_g2 AS SELECT EMBG, adresa, row_number() over() - 1 as rn FROM Gragjanin WHERE datum_ragjanje < (CURRENT_DATE - INTERVAL '18 years');
654CREATE TEMP TABLE tmp_cg2 AS SELECT count(*) as cg FROM tmp_g2;
655
656
657CREATE TEMP TABLE tmp_prethodni_sopstvenici AS
658SELECT
659 v.broj_na_sasija,
660 g.EMBG,
661 split_part(g.adresa, ' ', array_length(string_to_array(g.adresa, ' '), 1)) as grad,
662
663 (CURRENT_DATE - INTERVAL '3 years' - ((random() * 365)::INT * INTERVAL '1 day'))::DATE as star_bazen_datum
664FROM tmp_v2 v
665CROSS JOIN tmp_cg2 c
666
667JOIN tmp_g2 g ON g.rn = ((v.rn + 500000) % c.cg);
668
669
670INSERT INTO Registracija (EMBG, broj_na_sasija, datum_na_izvadanje, datum_na_istekuvanje, registerska_tablica)
671SELECT
672 EMBG,
673 broj_na_sasija,
674 (star_bazen_datum - (godina || ' years')::INTERVAL)::DATE as datum_na_izvadanje,
675 (star_bazen_datum - ((godina - 1) || ' years')::INTERVAL)::DATE as datum_na_istekuvanje,
676 COALESCE(
677 CASE
678 WHEN grad IN ('Skopje', 'Skopje,') THEN 'SK'
679 WHEN grad IN ('Bitola', 'Bitola,') THEN 'BT'
680 WHEN grad IN ('Kumanovo', 'Kumanovo,') THEN 'KU'
681 WHEN grad IN ('Tetovo', 'Tetovo,') THEN 'TE'
682 WHEN grad IN ('Ohrid', 'Ohrid,') THEN 'OH'
683 WHEN grad IN ('Shtip', 'Shtip,') THEN 'ST'
684 WHEN grad IN ('Veles', 'Veles,') THEN 'VE'
685 WHEN grad IN ('Prilep', 'Prilep,') THEN 'PP'
686 WHEN grad IN ('Kocani', 'Kocani,') THEN 'KO'
687 WHEN grad IN ('Gostivar', 'Gostivar,') THEN 'GV'
688 WHEN grad IN ('Gevgelija', 'Gevgelija,') THEN 'GE'
689 WHEN grad IN ('Strumica', 'Strumica,') THEN 'SR'
690 ELSE (ARRAY['SK','BT','KU','TE','OH','ST','VE','PP','KO','GV','GE','SR'])[floor(random()*12)+1]
691 END, 'SK'
692 ) || '-' ||
693 lpad(floor(random()*9999)::text, 4, '0') || '-' ||
694 chr((random()*25+65)::int) || chr((random()*25+65)::int) as tablica
695FROM tmp_prethodni_sopstvenici
696CROSS JOIN LATERAL generate_series(0, 1) as godina;
697
698
699DROP TABLE tmp_v2;
700DROP TABLE tmp_g2;
701DROP TABLE tmp_cg2;
702DROP TABLE tmp_prethodni_sopstvenici;
703
704------------------------------------------------------------------------------------
705---polnenje stavka zapisnik
706
707
708
709INSERT INTO Stavka_Zapisnik (reden_broj, id_na_zapisnik, id_na_prekrsok)
710SELECT
711 row_number() OVER (PARTITION BY z.id_na_zapisnik) as reden_broj,
712 z.id_na_zapisnik,
713 p.id_prekrsok
714FROM Zapisnik z
715CROSS JOIN LATERAL (
716
717 SELECT (floor(random() * 3 + (z.id_na_zapisnik * 0)) + 1)::INT as limit_val
718) r
719CROSS JOIN LATERAL (
720
721 SELECT id_prekrsok
722 FROM Prekrsok
723 ORDER BY random() + (z.id_na_zapisnik * 0)
724 LIMIT r.limit_val
725) p;
726
727
728------------polnenje uplata
729
730TRUNCATE TABLE Uplata RESTART IDENTITY;
731
732
733INSERT INTO Uplata (iznos, status, datum_uplata, Uplatil_Gragjanin, id_zapisnik, nacin_plakanje)
734SELECT
735 0,
736
737
738 CASE WHEN (id_na_zapisnik::bigint * 137) % 100 < 70 THEN 'Plateno' ELSE 'Neplateno' END,
739
740
741 CASE WHEN (id_na_zapisnik::bigint * 137) % 100 < 70
742 THEN LEAST(datum + ((id_na_zapisnik::bigint * 113) % 30)::int, CURRENT_DATE)
743 ELSE NULL
744 END,
745
746 EMBG_Prekrsuvach,
747 id_na_zapisnik,
748
749 CASE
750 WHEN (id_na_zapisnik::bigint * 137) % 100 < 45 THEN 'E-bankarstvo'
751 WHEN (id_na_zapisnik::bigint * 137) % 100 < 65 THEN 'Platezna karticka'
752 WHEN (id_na_zapisnik::bigint * 137) % 100 < 70 THEN 'Gotovo/Uplatnica'
753 ELSE NULL
754 END
755FROM Zapisnik;
756
757
758DROP TABLE IF EXISTS tmp_suma_zapisnici;
759
760
761CREATE TEMP TABLE tmp_suma_zapisnici AS
762SELECT
763 sz.id_na_zapisnik,
764 SUM(k.iznos_kazna) as vkupen_iznos
765FROM Stavka_Zapisnik sz
766JOIN Prekrsok p ON sz.id_na_prekrsok = p.id_prekrsok
767JOIN Kazna k ON p.id_kazna = k.id_kazna
768GROUP BY sz.id_na_zapisnik;
769
770ALTER TABLE tmp_suma_zapisnici ADD PRIMARY KEY (id_na_zapisnik);
771
772UPDATE Uplata u
773SET iznos = ts.vkupen_iznos
774FROM tmp_suma_zapisnici ts
775WHERE u.id_zapisnik = ts.id_na_zapisnik;
776
777
778DROP TABLE tmp_suma_zapisnici;
779