DatabaseCreation: DDL_fill.sql

File DDL_fill.sql, 4.7 KB (added by 231020, 2 weeks ago)
Line 
1TRUNCATE TABLE
2users,
3bank_account,
4portfolios,
5stock,
6stock_history,
7portfolio_holdings,
8trade_request,
9broker_order,
10order_matching_log,
11"transaction",
12payment_transaction,
13settlement_record,
14dividend_payment,
15dividend,
16CFD_position,
17watchlist,
18oauth_pending_links,
19user_auth_providers
20RESTART IDENTITY CASCADE;
21
22
23INSERT INTO users (email, password, role, username)
24SELECT
25 'user' || i || '@mail.com',
26 md5('pass' || i),
27 CASE WHEN random() < 0.97 THEN 'USER' ELSE 'ADMIN' END,
28 'user_' || i
29FROM generate_series(1, 100000) i;
30
31INSERT INTO bank_account (account_number, bank, users_id)
32SELECT
33 1000000000 + i,
34 (ARRAY['NLB','Komercijalna','Stopanska'])[1 + (random()*2)::int],
35 i
36FROM generate_series(1, 100000) i;
37
38
39INSERT INTO portfolios (balance, user_id)
40SELECT
41 (random()*100000)::numeric(18,2),
42 i
43FROM generate_series(1, 100000) i;
44
45INSERT INTO stock (symbol, name, current_price, last_price, percentage, turnover, last_updated)
46SELECT
47 'STK' || i,
48 'Company ' || i,
49 (random()*500 + 5),
50 (random()*500 + 5),
51 (random()*10 - 5),
52 (random()*1000000),
53 now()
54FROM generate_series(1, 500) i;
55
56
57INSERT INTO stock_history (price, stock_id, timestamp)
58SELECT
59 (random()*500 + 5),
60 (1 + (random()*499)::int),
61 CURRENT_DATE - (random()*365)::int
62FROM generate_series(1, 3000000);
63
64
65INSERT INTO portfolio_holdings (quantity, avg_price, stock_id, portfolio_id)
66SELECT
67 (random()*200)::int,
68 (random()*500 + 5),
69 (1 + (random()*499)::int),
70 (1 + (random()*99999)::int)
71FROM generate_series(1, 800000);
72
73
74INSERT INTO trade_request (
75 portfolio_id,
76 price_per_unit,
77 quantity,
78 status,
79 stock_symbol,
80 timestamp,
81 type
82)
83SELECT
84 (1 + (random()*99999)::int),
85 (random()*500 + 5),
86 (random()*100)::int,
87 CASE
88 WHEN random() < 0.6 THEN 'OPEN'
89 WHEN random() < 0.9 THEN 'CLOSED'
90 ELSE 'CANCELLED'
91 END,
92 'STK' || (1 + (random()*499)::int),
93 now() - (random()*1000 || ' hours')::interval,
94 CASE WHEN random() < 0.5 THEN 'BUY' ELSE 'SELL' END
95FROM generate_series(1, 1000000);
96
97
98INSERT INTO broker_order (
99 order_type,
100 limit_price,
101 quantity,
102 status,
103 executed_price,
104 broker_fee,
105 mse_reference_number,
106 submitted_at,
107 executed_at,
108 trade_request_id,
109 order_matching_logid
110)
111SELECT
112 CASE WHEN random() < 0.5 THEN 'BUY' ELSE 'SELL' END,
113 (random()*500 + 5),
114 (random()*100)::int,
115 CASE
116 WHEN random() < 0.7 THEN 'PENDING'
117 WHEN random() < 0.9 THEN 'EXECUTED'
118 ELSE 'CANCELLED'
119 END,
120 (random()*500 + 5),
121 (random()*10),
122 upper(md5(i::text)),
123 now(),
124 now(),
125 (1 + (random()*999999)::int),
126 (1 + (random()*999999)::int)
127FROM generate_series(1, 1000000) i;
128
129
130INSERT INTO order_matching_log (
131 broker_order_id,
132 checked_price,
133 result,
134 checked_at
135)
136SELECT
137 (1 + (random()*999999)::int),
138 (random()*500 + 5),
139 CASE
140 WHEN random() < 0.5 THEN 'MATCHED'
141 WHEN random() < 0.8 THEN 'NO_MATCH'
142 ELSE 'PARTIAL'
143 END,
144 now() - (random()*1000 || ' minutes')::interval
145FROM generate_series(1, 1000000);
146
147
148INSERT INTO "transaction" (
149 price,
150 quantity,
151 timestamp,
152 type,
153 origin,
154 user_id,
155 stock_id
156)
157SELECT
158 (random()*500 + 5),
159 (random()*100)::int,
160 now() - (random()*2000 || ' hours')::interval,
161 CASE WHEN random() < 0.5 THEN 'BUY' ELSE 'SELL' END,
162 CASE WHEN random() < 0.7 THEN 'INTERNAL' ELSE 'EXTERNAL' END,
163 (1 + (random()*99999)::int),
164 (1 + (random()*499)::int)
165FROM generate_series(1, 2000000);
166
167
168INSERT INTO payment_transaction (
169 amount,
170 type,
171 status,
172 timestamp,
173 bank_account_id
174)
175SELECT
176 (random()*10000)::bigint,
177 CASE WHEN random() < 0.5 THEN 'DEPOSIT' ELSE 'WITHDRAWAL' END,
178 CASE
179 WHEN random() < 0.7 THEN 'SUCCESS'
180 WHEN random() < 0.9 THEN 'PENDING'
181 ELSE 'FAILED'
182 END,
183 now() - (random()*1000 || ' hours')::interval,
184 (1 + (random()*99999)::int)
185FROM generate_series(1, 500000);
186
187
188INSERT INTO dividend (amount_per_share, paymentdate, stock_id)
189SELECT
190 (random()*5),
191 CURRENT_DATE - (random()*365)::int,
192 (1 + (random()*499)::int)
193FROM generate_series(1, 10000);
194
195INSERT INTO dividend_payment (totalAmount, paid_at, dividend_id, users_id)
196SELECT
197 (random()*1000),
198 CURRENT_DATE - (random()*365)::int,
199 (1 + (random()*9999)::int),
200 (1 + (random()*99999)::int)
201FROM generate_series(1, 50000);
202
203
204INSERT INTO cfd_position (
205 status,
206 quantity,
207 profit_loss,
208 opened_at,
209 close_price,
210 open_price,
211 users_id,
212 stock_id
213)
214SELECT
215 CASE WHEN random() < 0.5 THEN 'OPEN' ELSE 'CLOSED' END,
216 (random()*100)::int,
217 (random()*2000 - 1000),
218 CURRENT_DATE - (random()*365)::int,
219 (random()*500),
220 (random()*500),
221 (1 + (random()*99999)::int),
222 (1 + (random()*499)::int)
223FROM generate_series(1, 100000);
224
225
226INSERT INTO watchlist (price_above, price_below, stock_id, user_id)
227SELECT
228 (random()*500 + 50),
229 (random()*50),
230 (1 + (random()*499)::int),
231 (1 + (random()*99999)::int)
232FROM generate_series(1, 200000);