-
Notifications
You must be signed in to change notification settings - Fork 147
/
Copy pathusing_example.update.sql
30 lines (30 loc) · 1.17 KB
/
using_example.update.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
--деперсонализация (обезличивание) персональных данных (email)
call loop_execute(
'public.person_email', --table_name
$query$
/*
MATERIALIZED позволяет сначала вычислить все тяжёлые вычисления, а потом модифицировать строки.
В этом случае длительность блокирования строк будет меньше, это видно в плане запроса.
*/
WITH s (id, value) AS MATERIALIZED (
SELECT id,
hash_email_username(email, id)
FROM public.person_email
WHERE id > $1
--AND use_parallel(id, 1, 1)
AND email IS NOT NULL AND TRIM(email) != ''
AND NOT is_email_ignore(email)
ORDER BY id
LIMIT $2 OFFSET $3
),
m AS (
UPDATE public.person_email AS u
SET email = s.value
FROM s
WHERE s.id = u.id
)
SELECT MAX(id) AS stop_id,
COUNT(*) AS affected_rows
FROM s;
$query$
);