-
Notifications
You must be signed in to change notification settings - Fork 147
/
Copy pathusing_example.delete.sql
32 lines (32 loc) · 1.37 KB
/
using_example.delete.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
-- удаление невалидных email
call loop_execute(
'public.person_email', --table_name
$query$
/*
MATERIALIZED позволяет сначала вычислить все тяжёлые вычисления, а потом модифицировать строки.
В этом случае длительность блокирования строк будет меньше, это видно в плане запроса.
*/
WITH s AS MATERIALIZED (
SELECT id
FROM public.person_email
WHERE id > $1
--AND use_parallel(id, 1, 1)
AND email IS NOT NULL -- skip NULL
AND email !~ '^\s*$' --skip empty (similar NULL)
AND NOT(
AND octet_length(email) BETWEEN 6 AND 320 -- https://en.wikipedia.org/wiki/Email_address
AND email LIKE '_%@_%.__%' -- rough, but quick check email syntax
AND is_email(email) -- accurate, but slow check email syntax
)
ORDER BY id
LIMIT $2 OFFSET $3
),
m AS (
DELETE FROM public.person_email AS d
WHERE id IN (SELECT id FROM s)
)
SELECT MAX(id) AS stop_id,
COUNT(*) AS affected_rows
FROM s;
$query$
);