28 lines
1.1 KiB
PL/PgSQL
28 lines
1.1 KiB
PL/PgSQL
begin;
|
|
|
|
create or replace function messages_fulltext(msg messages) returns tsvector
|
|
language plpgsql immutable as $$
|
|
begin
|
|
return setweight(to_tsvector('russian', regexp_replace(
|
|
coalesce(msg.props->>'from', '') || ' ' ||
|
|
coalesce(msg.props->>'replyto', '') || ' ' ||
|
|
coalesce(msg.props->>'to', '') || ' ' ||
|
|
coalesce(msg.props->>'cc', '') || ' ' ||
|
|
coalesce(msg.props->>'bcc', '') || ' ' ||
|
|
(select string_agg((a->>'name') || ' ' || (a->>'mimetype') || ' ' || (a->>'size'), ' ')
|
|
from jsonb_array_elements(coalesce(msg.props->'attachments', '[]'::jsonb)) as t (a)) || ' ' ||
|
|
msg.subject,
|
|
'\W+', ' ', 'g'
|
|
)), 'A')
|
|
|| setweight(to_tsvector('russian', msg.body_html_text || ' ' || msg.body_text), 'B');
|
|
end
|
|
$$;
|
|
|
|
update messages
|
|
set props = props || jsonb_build_object('attachments', (
|
|
select jsonb_agg(jsonb_build_object('name', a->>0, 'mimetype', a->>1, 'size', a->>2)) from jsonb_array_elements(props->'attachments') as t (a)
|
|
))
|
|
where jsonb_array_length(props->'attachments') > 0;
|
|
|
|
commit;
|