环境
系统平台:中标麒麟(龙芯)6
版本:4.5
症状
程序控制台打印信息:
com.highgo.jdbc.util.PSQLException: ERROR: column “create_time” is of type timestamp without time zone but expression is of type character varying
建议:You will need to rewrite or cast the expression.
问题原因
客户源库为MySQL,数据库字段类型为timestamp,但是客户插入数据时,强转插入数据为string数组。切换到瀚高数据库后,
数据库类型为timestamp,应用中还是string类型,导致插入数据类型与数据库类型不一致报错
解决方案
解决方案1、
修改数据库中表字段的类型,客户前台未进行格式限制,防止插入数据格式不正确。表上该字段添加trigger
CREATE TRIGGER example_trigger before insert or update ON 表名 FOR EACH ROW EXECUTE PROCEDURE auditisdatefunc();
CREATE OR REPLACE FUNCTION auditisdatefunc()
RETURNS boolean
AS $$
begin
IF (NEW.验证的列名 IS NULL) THEN
RETURN FALSE;
END IF;
PERFORM NEW.验证的列名::timestamp;
RETURN TRUE;
EXCEPTION
WHEN others THEN
RETURN FALSE;
end
$$
LANGUAGE 'plpgsql'
解决方案2、
添加cast(varchar as timestamp) with inout as implicit