我为postgres提供了以下过程,该过程将用于为不同表的分区生成名称.
CREATE OR REPLACE FUNCTION get_partition_name(table_name VARCHAR, archived_on TIMESTAMP)
RETURNS VARCHAR
AS $get_partition_name$
DECLARE
partition_date TIMESTAMP := date_trunc('month', archived_on, 'Universal');
BEGIN
RETURN CONCAT(table_name, to_char(partition_date, '"_y"YYYY"m"MM'));
END;
$get_partition_name$ LANGUAGE plpgsql;
当我运行这个函数时,我得到了正确的格式化字符串,但是月份是关闭的:
SELECT get_partition_name('george', '2024-03-06 12:39:48.399 -0500');
RESULT: george_y2024m02
为什么要取消一个月?即使当您手动将其从东部标准时间转换为UTC时,它也不会带您回到那么远的地方.当我从声明中删除UTC
参数时,似乎工作正常?
SELECT get_partition_name('george', '2024-03-06 12:39:48.399 -0500');
RESULT: george_y2024m03
我到底做错了什么?