Django+PostgreSQL触发器报错:column 'now' does not exist 求助
问题分析与解决
错误根源
触发器函数tg_fun_name()里的v_date_ini := now::date是语法错误。PostgreSQL中,now不是内置常量或列,获取当前时间的正确写法是函数调用now()。不加括号的话,数据库会把now当成表的列名,而你的表中没有这个列,所以触发UndefinedColumn错误。
解决步骤
- 找到对应的PL/pgSQL触发器函数
tg_fun_name(),定位到第13行的赋值语句。 - 将错误代码:
替换为以下两种正确写法之一:v_date_ini := now::date- 用
now()函数转换日期:v_date_ini := now()::date - 直接使用
CURRENT_DATE(更简洁,本身就是日期类型,无需转换):v_date_ini := CURRENT_DATE
- 用
- 重新创建触发器函数(或执行
ALTER FUNCTION更新),然后重新启用触发器。 - 测试数据复制功能,确认错误消失。
额外说明
Django模型里的first_subscribed = models.DateField(auto_now=True)本身没有问题,它是在ORM层面自动填充当前日期,和触发器的错误无关。禁用触发器后,错误代码不再执行,所以系统恢复正常。
内容的提问来源于stack exchange,提问作者Israel Rodriguez
相关产品推荐
相关产品推荐

