From ddabd42a5312ce197645ba6d924f8553a08c8854 Mon Sep 17 00:00:00 2001 From: liugang Date: Sat, 11 Oct 2025 10:52:02 +0800 Subject: [PATCH] * [misc] Convert file format from dos to unix. --- db/pgsql.sql | 82 ++++---- db/pgsql_function.sql | 480 +++++++++++++++++++++--------------------- 2 files changed, 281 insertions(+), 281 deletions(-) diff --git a/db/pgsql.sql b/db/pgsql.sql index c8c4be753c..cee6917ca3 100644 --- a/db/pgsql.sql +++ b/db/pgsql.sql @@ -1,42 +1,42 @@ -DO $$ -DECLARE - rec RECORD; - max_id BIGINT; -BEGIN - FOR rec IN ( - SELECT - t.table_name AS table_name, - c.column_name AS column_name, - regexp_replace( - c.column_default, - '^nextval\(''([^'']+)''::regclass\)$', - '\1' - ) AS seq_name - FROM - information_schema.columns c - JOIN - information_schema.tables t ON c.table_name = t.table_name - WHERE - t.table_type = 'BASE TABLE' - AND c.column_default LIKE 'nextval(''%''::regclass)' - AND t.table_schema = 'public' - ) LOOP - EXECUTE format('SELECT COALESCE(MAX(%I), 0) FROM %I', rec.column_name, rec.table_name) - INTO max_id; - - EXECUTE format('SELECT setval(''%s'', %s)', rec.seq_name, max_id + 1); - - RAISE NOTICE '调整序列: % (表: %,字段: %),新值: %', - rec.seq_name, rec.table_name, rec.column_name, max_id + 1; - END LOOP; -END $$; - --- - -CREATE INDEX idx_zt_searchindex_fts -ON zt_searchindex -USING gin( - to_tsvector('pg_catalog.english', - coalesce(title, '') || ' ' || coalesce(content, '') - ) +DO $$ +DECLARE + rec RECORD; + max_id BIGINT; +BEGIN + FOR rec IN ( + SELECT + t.table_name AS table_name, + c.column_name AS column_name, + regexp_replace( + c.column_default, + '^nextval\(''([^'']+)''::regclass\)$', + '\1' + ) AS seq_name + FROM + information_schema.columns c + JOIN + information_schema.tables t ON c.table_name = t.table_name + WHERE + t.table_type = 'BASE TABLE' + AND c.column_default LIKE 'nextval(''%''::regclass)' + AND t.table_schema = 'public' + ) LOOP + EXECUTE format('SELECT COALESCE(MAX(%I), 0) FROM %I', rec.column_name, rec.table_name) + INTO max_id; + + EXECUTE format('SELECT setval(''%s'', %s)', rec.seq_name, max_id + 1); + + RAISE NOTICE '调整序列: % (表: %,字段: %),新值: %', + rec.seq_name, rec.table_name, rec.column_name, max_id + 1; + END LOOP; +END $$; + +-- + +CREATE INDEX idx_zt_searchindex_fts +ON zt_searchindex +USING gin( + to_tsvector('pg_catalog.english', + coalesce(title, '') || ' ' || coalesce(content, '') + ) ); \ No newline at end of file diff --git a/db/pgsql_function.sql b/db/pgsql_function.sql index d51a69abaa..5ab06cd6e7 100644 --- a/db/pgsql_function.sql +++ b/db/pgsql_function.sql @@ -1,241 +1,241 @@ -CREATE OR REPLACE FUNCTION FIND_IN_SET( - target text, - list text -) RETURNS boolean AS $$ -DECLARE - arr text[]; - i integer; -BEGIN - IF list IS NULL OR list = '' THEN - RETURN false; - END IF; - - arr := string_to_array(list, ','); - - FOR i IN 1..array_length(arr, 1) LOOP - IF arr[i] = target THEN - RETURN true; - END IF; - END LOOP; - - RETURN false; -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION FIND_IN_SET( - target integer, - list text -) RETURNS boolean AS $$ -BEGIN - RETURN FIND_IN_SET(target::text, list); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION GROUP_CONCAT( - input text, - delimiter text = ',' -) RETURNS text AS $$ -BEGIN - RETURN string_agg(input, delimiter); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - -CREATE OR REPLACE FUNCTION GROUP_CONCAT( - input numeric, - delimiter text = ',' -) RETURNS text AS $$ -BEGIN - RETURN string_agg(input::text, delimiter); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - -CREATE OR REPLACE FUNCTION GROUP_CONCAT( - input integer, - delimiter text = ',' -) RETURNS text AS $$ -BEGIN - RETURN string_agg(input::text, delimiter); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION ROUND( - num float, - decimals integer -) RETURNS numeric AS $$ -BEGIN - RETURN ROUND(num::numeric, decimals); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION ROUND( - num double precision, - decimals integer -) RETURNS numeric AS $$ -BEGIN - RETURN ROUND(num::numeric, decimals); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION ROUND( - num text, - decimals integer -) RETURNS numeric AS $$ -BEGIN - RETURN ROUND(num::numeric, decimals); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION TIMESTAMPDIFF( - unit TEXT, - start_time TIMESTAMP, - end_time TIMESTAMP -) RETURNS INTEGER AS $$ -DECLARE - diff_interval INTERVAL; - diff_seconds NUMERIC; -BEGIN - diff_interval := end_time - start_time; - - CASE lower(unit) - WHEN 'year' THEN - RETURN EXTRACT(YEAR FROM end_time) - EXTRACT(YEAR FROM start_time) - - CASE WHEN (EXTRACT(MONTH FROM end_time) < EXTRACT(MONTH FROM start_time)) - OR (EXTRACT(MONTH FROM end_time) = EXTRACT(MONTH FROM start_time) - AND EXTRACT(DAY FROM end_time) < EXTRACT(DAY FROM start_time)) - THEN 1 ELSE 0 END; - WHEN 'month' THEN - RETURN (EXTRACT(YEAR FROM end_time) - EXTRACT(YEAR FROM start_time)) * 12 - + (EXTRACT(MONTH FROM end_time) - EXTRACT(MONTH FROM start_time)) - - CASE WHEN EXTRACT(DAY FROM end_time) < EXTRACT(DAY FROM start_time) - THEN 1 ELSE 0 END; - WHEN 'day' THEN - RETURN EXTRACT(DAY FROM diff_interval); - WHEN 'hour' THEN - diff_seconds := EXTRACT(EPOCH FROM diff_interval); - RETURN floor(diff_seconds / 3600); - WHEN 'minute' THEN - diff_seconds := EXTRACT(EPOCH FROM diff_interval); - RETURN floor(diff_seconds / 60); - WHEN 'second' THEN - RETURN EXTRACT(EPOCH FROM diff_interval); - ELSE - RETURN NULL; - END CASE; -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(bigint, integer) -RETURNS bigint AS $$ -BEGIN - RETURN COALESCE($1, $2::bigint); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(double precision, integer) -RETURNS double precision AS $$ -BEGIN - RETURN COALESCE($1, $2::double precision); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(integer, bigint) -RETURNS bigint AS $$ -BEGIN - RETURN COALESCE($1::bigint, $2); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(bigint, bigint) -RETURNS bigint AS $$ -BEGIN - RETURN COALESCE($1, $2); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(integer, integer) -RETURNS integer AS $$ -BEGIN - RETURN COALESCE($1, $2); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(numeric, numeric) -RETURNS numeric AS $$ -BEGIN - RETURN COALESCE($1, $2); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION IFNULL(text, text) -RETURNS text AS $$ -BEGIN - RETURN COALESCE($1, $2); -END; -$$ LANGUAGE plpgsql IMMUTABLE; - --- - -CREATE OR REPLACE FUNCTION MONTH(date_val DATE) -RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; - --- - -CREATE OR REPLACE FUNCTION MONTH(date_val TIMESTAMP) -RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; - --- - -CREATE OR REPLACE FUNCTION MONTH(date_val TIMESTAMPTZ) -RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; - --- - -CREATE OR REPLACE FUNCTION YEAR(date_val DATE) -RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; - --- - -CREATE OR REPLACE FUNCTION YEAR(date_val TIMESTAMP) -RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; - --- - -CREATE OR REPLACE FUNCTION YEAR(date_val TIMESTAMPTZ) -RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; - --- - -CREATE OR REPLACE FUNCTION DATEDIFF( - end_date ANYELEMENT, - start_date ANYELEMENT -) RETURNS INTEGER AS $$ -BEGIN - RETURN (end_date - start_date)::INTEGER; -END; +CREATE OR REPLACE FUNCTION FIND_IN_SET( + target text, + list text +) RETURNS boolean AS $$ +DECLARE + arr text[]; + i integer; +BEGIN + IF list IS NULL OR list = '' THEN + RETURN false; + END IF; + + arr := string_to_array(list, ','); + + FOR i IN 1..array_length(arr, 1) LOOP + IF arr[i] = target THEN + RETURN true; + END IF; + END LOOP; + + RETURN false; +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION FIND_IN_SET( + target integer, + list text +) RETURNS boolean AS $$ +BEGIN + RETURN FIND_IN_SET(target::text, list); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION GROUP_CONCAT( + input text, + delimiter text = ',' +) RETURNS text AS $$ +BEGIN + RETURN string_agg(input, delimiter); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +CREATE OR REPLACE FUNCTION GROUP_CONCAT( + input numeric, + delimiter text = ',' +) RETURNS text AS $$ +BEGIN + RETURN string_agg(input::text, delimiter); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +CREATE OR REPLACE FUNCTION GROUP_CONCAT( + input integer, + delimiter text = ',' +) RETURNS text AS $$ +BEGIN + RETURN string_agg(input::text, delimiter); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION ROUND( + num float, + decimals integer +) RETURNS numeric AS $$ +BEGIN + RETURN ROUND(num::numeric, decimals); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION ROUND( + num double precision, + decimals integer +) RETURNS numeric AS $$ +BEGIN + RETURN ROUND(num::numeric, decimals); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION ROUND( + num text, + decimals integer +) RETURNS numeric AS $$ +BEGIN + RETURN ROUND(num::numeric, decimals); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION TIMESTAMPDIFF( + unit TEXT, + start_time TIMESTAMP, + end_time TIMESTAMP +) RETURNS INTEGER AS $$ +DECLARE + diff_interval INTERVAL; + diff_seconds NUMERIC; +BEGIN + diff_interval := end_time - start_time; + + CASE lower(unit) + WHEN 'year' THEN + RETURN EXTRACT(YEAR FROM end_time) - EXTRACT(YEAR FROM start_time) + - CASE WHEN (EXTRACT(MONTH FROM end_time) < EXTRACT(MONTH FROM start_time)) + OR (EXTRACT(MONTH FROM end_time) = EXTRACT(MONTH FROM start_time) + AND EXTRACT(DAY FROM end_time) < EXTRACT(DAY FROM start_time)) + THEN 1 ELSE 0 END; + WHEN 'month' THEN + RETURN (EXTRACT(YEAR FROM end_time) - EXTRACT(YEAR FROM start_time)) * 12 + + (EXTRACT(MONTH FROM end_time) - EXTRACT(MONTH FROM start_time)) + - CASE WHEN EXTRACT(DAY FROM end_time) < EXTRACT(DAY FROM start_time) + THEN 1 ELSE 0 END; + WHEN 'day' THEN + RETURN EXTRACT(DAY FROM diff_interval); + WHEN 'hour' THEN + diff_seconds := EXTRACT(EPOCH FROM diff_interval); + RETURN floor(diff_seconds / 3600); + WHEN 'minute' THEN + diff_seconds := EXTRACT(EPOCH FROM diff_interval); + RETURN floor(diff_seconds / 60); + WHEN 'second' THEN + RETURN EXTRACT(EPOCH FROM diff_interval); + ELSE + RETURN NULL; + END CASE; +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(bigint, integer) +RETURNS bigint AS $$ +BEGIN + RETURN COALESCE($1, $2::bigint); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(double precision, integer) +RETURNS double precision AS $$ +BEGIN + RETURN COALESCE($1, $2::double precision); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(integer, bigint) +RETURNS bigint AS $$ +BEGIN + RETURN COALESCE($1::bigint, $2); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(bigint, bigint) +RETURNS bigint AS $$ +BEGIN + RETURN COALESCE($1, $2); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(integer, integer) +RETURNS integer AS $$ +BEGIN + RETURN COALESCE($1, $2); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(numeric, numeric) +RETURNS numeric AS $$ +BEGIN + RETURN COALESCE($1, $2); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION IFNULL(text, text) +RETURNS text AS $$ +BEGIN + RETURN COALESCE($1, $2); +END; +$$ LANGUAGE plpgsql IMMUTABLE; + +-- + +CREATE OR REPLACE FUNCTION MONTH(date_val DATE) +RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; + +-- + +CREATE OR REPLACE FUNCTION MONTH(date_val TIMESTAMP) +RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; + +-- + +CREATE OR REPLACE FUNCTION MONTH(date_val TIMESTAMPTZ) +RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(MONTH FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; + +-- + +CREATE OR REPLACE FUNCTION YEAR(date_val DATE) +RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; + +-- + +CREATE OR REPLACE FUNCTION YEAR(date_val TIMESTAMP) +RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; + +-- + +CREATE OR REPLACE FUNCTION YEAR(date_val TIMESTAMPTZ) +RETURNS INTEGER AS $$ BEGIN RETURN EXTRACT(YEAR FROM date_val)::INTEGER; END; $$ LANGUAGE plpgsql; + +-- + +CREATE OR REPLACE FUNCTION DATEDIFF( + end_date ANYELEMENT, + start_date ANYELEMENT +) RETURNS INTEGER AS $$ +BEGIN + RETURN (end_date - start_date)::INTEGER; +END; $$ LANGUAGE plpgsql; \ No newline at end of file