forked from folio-org/folio-analytics
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathusers_addresses.sql
49 lines (34 loc) · 1.84 KB
/
users_addresses.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
DROP TABLE IF EXISTS users_addresses;
-- Create a derived table that takes the user_users table and unpacks
-- the address array into a normalized table
CREATE TABLE users_addresses AS
SELECT
uu.id AS user_id,
json_extract_path_text(addresses.data, 'id') AS address_id,
json_extract_path_text(addresses.data, 'countryId') AS address_country_id,
json_extract_path_text(addresses.data, 'addressLine1') AS address_line_1,
json_extract_path_text(addresses.data, 'addressLine2') AS address_line_2,
json_extract_path_text(addresses.data, 'city') AS address_city,
json_extract_path_text(addresses.data, 'region') AS address_region,
json_extract_path_text(addresses.data, 'postalCode') AS address_postal_code,
json_extract_path_text(addresses.data, 'addressTypeId') AS address_type_id,
ua.address_type AS address_type_name,
ua.desc AS address_type_description,
json_extract_path_text(addresses.data, 'primaryAddress')::boolean AS is_primary_address
FROM
user_users AS uu
CROSS JOIN json_array_elements(json_extract_path(data, 'personal', 'addresses')) AS addresses (data)
LEFT JOIN user_addresstypes AS ua ON json_extract_path_text(addresses.data, 'addressTypeId') = ua.id;
CREATE INDEX ON users_addresses (user_id);
CREATE INDEX ON users_addresses (address_id);
CREATE INDEX ON users_addresses (address_country_id);
CREATE INDEX ON users_addresses (address_line_1);
CREATE INDEX ON users_addresses (address_line_2);
CREATE INDEX ON users_addresses (address_city);
CREATE INDEX ON users_addresses (address_region);
CREATE INDEX ON users_addresses (address_postal_code);
CREATE INDEX ON users_addresses (address_type_id);
CREATE INDEX ON users_addresses (address_type_name);
CREATE INDEX ON users_addresses (address_type_description);
CREATE INDEX ON users_addresses (is_primary_address);
VACUUM ANALYZE users_addresses;