-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfill_db.sql
More file actions
116 lines (110 loc) · 4.64 KB
/
fill_db.sql
File metadata and controls
116 lines (110 loc) · 4.64 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
\c testdb
--функции заполнения
CREATE OR REPLACE FUNCTION random_string(l INT)RETURNS TEXT AS $$
DECLARE
chars TEXT[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}';
res TEXT := '';
i INT := 0;
BEGIN
FOR i IN 1..l LOOP
res := res || chars[1+random()*(array_length(chars, 1)-1)];
END LOOP;
RETURN res;
END;
$$ LANGUAGE plpgsql;
--________________________________________________________________________________________________________________________________________
CREATE OR REPLACE FUNCTION random_email(l INT)RETURNS TEXT AS $$
DECLARE
res TEXT;
BEGIN
res := random_string(l);
res := res || '@yangex.ru';
RETURN res;
END;
$$ LANGUAGE plpgsql;
--________________________________________________________________________________________________________________________________________
--USERS
INSERT INTO users (EMAIL,
PSSWD,
TIME_REG,
LAST_TIME)
SELECT
random_email(((random() * 20 + 4) :: INT)),
random_string(((random() * 20 + 4):: INT)),
'2011-09-28 01:00:00' :: TIMESTAMP + random() * '365 days' :: INTERVAL,
'2012-09-28 01:00:00' :: TIMESTAMP + random() * '365 days' :: INTERVAL
FROM generate_series(1, 2500) AS t(num);
SELECT COUNT(*) FROM users;
--________________________________________________________________________________________________________________________________________
--VACANCIES
INSERT INTO vacancies (NAME ,
POSITION ,
DESCRIPTION,
TIME_REG ,
TIME_END ,
EXPIRIENCE ,
SALARY_MIN ,
SALARY_MAX )
SELECT
random_string(((random() * 20 + 4) :: INT)),
random_string(((random() * 20 + 4) :: INT)),
random_string(((random() * 100 + 10):: INT)),
'2011-01-01 01:00:00' :: TIMESTAMP + random() * '365 days' :: INTERVAL,
'2012-01-01 01:00:00' :: TIMESTAMP + random() * '365 days' :: INTERVAL,
((random() * 80 + 1) :: INT),
((random() * 20000 + 10000) :: INT),
((random() * 2000000 + 10000) :: INT)
FROM generate_series(1, 2500000) AS t(num);
SELECT COUNT(*) FROM vacancies;
--_______________________________________________________________________________________________________________________________________
--SUMMARIES
INSERT INTO summaries (USR_ID ,
USR_EMAIL ,
POSITION ,
AGE ,
NAME ,
EXPIRIENCE,
SKILLS ,
SALARY_MIN,
SALARY_MAX)
SELECT
u.USR_ID,
u.EMAIL,
random_string((random() * 20 + 4) :: INT),
((random() * 40 + 18) :: INT),
(random_string(((random() * 20 + 4):: INT)), random_string(((random() * 20 + 4):: INT)), random_string(((random() * 20 + 4):: INT))) :: FULL_NAME,
((random() * 40 + 1) :: INT),
random_string((random() * 20 + 4) :: INT),
((random() * 20000 + 10000) :: INT),
((random() * 2000000 + 10000) :: INT)
FROM users u
LEFT JOIN generate_series(1, 10000) AS t(num) ON (1 = round(random() * 10));
SELECT COUNT(*) FROM summaries;
--________________________________________________________________________________________________________________________________________
--RESPONCIES
INSERT INTO responses (VACANCY_ID, SUMMARY_ID)
SELECT
v.VACANCY_ID,
s.SUMMARY_ID
FROM (SELECT VACANCY_ID
FROM vacancies
ORDER BY random()
LIMIT 5000) AS v
JOIN (SELECT SUMMARY_ID
FROM summaries
ORDER BY random()
LIMIT 5000) AS s ON 1 = round(random() * 10);
SELECT COUNT(*) FROM responses;
--________________________________________________________________________________________________________________________________________
--MESSAGES
INSERT INTO messages (RESPONSE_ID,
MESSAGE,
MSG_TIME)
SELECT
r.RESPONSE_ID,
random_string((random() * 50 + 4):: INT),
'2012-01-01 01:00:00' :: TIMESTAMP + random() * '365 days' :: INTERVAL
FROM (SELECT RESPONSE_ID
FROM responses) AS r LEFT JOIN generate_series(1, 20) AS t(num) ON 1 = round(random() * 5);
SELECT COUNT(*) FROM messages;
--________________________________________________________________________________________________________________________________________