mirror of
https://github.com/tgdrive/teldrive.git
synced 2025-01-11 01:28:27 +08:00
66 lines
1.2 KiB
PL/PgSQL
66 lines
1.2 KiB
PL/PgSQL
-- +goose Up
|
|
create extension if not exists pgcrypto;
|
|
|
|
create extension if not exists btree_gin;
|
|
|
|
create schema if not exists teldrive;
|
|
|
|
create collation if not exists numeric (provider = icu, locale = 'en@colnumeric=yes');
|
|
|
|
-- +goose StatementBegin
|
|
create or replace
|
|
function teldrive.generate_uid(size int) returns text language plpgsql as $$
|
|
declare characters text := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
|
|
bytes bytea := gen_random_bytes(size);
|
|
|
|
l int := length(characters);
|
|
|
|
i int := 0;
|
|
|
|
output text := '';
|
|
|
|
begin while i < size loop output := output || substr(characters,
|
|
get_byte(bytes,
|
|
i) % l + 1,
|
|
1);
|
|
|
|
i := i + 1;
|
|
end loop;
|
|
|
|
return output;
|
|
end;
|
|
|
|
$$;
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose StatementBegin
|
|
create or replace
|
|
function teldrive.get_tsvector(t text) returns tsvector language plpgsql immutable as $$
|
|
declare res tsvector := to_tsvector(regexp_replace(t,
|
|
'[^A-Za-z0-9 ]',
|
|
' ',
|
|
'g'));
|
|
|
|
begin return res;
|
|
end;
|
|
|
|
$$;
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose StatementBegin
|
|
create or replace
|
|
function teldrive.get_tsquery(t text) returns tsquery language plpgsql immutable as $$
|
|
declare res tsquery = concat(
|
|
plainto_tsquery(regexp_replace(t,
|
|
'[^A-Za-z0-9 ]',
|
|
' ',
|
|
'g')),
|
|
':*'
|
|
)::tsquery;
|
|
|
|
begin return res;
|
|
end;
|
|
|
|
$$;
|
|
-- +goose StatementEnd
|