【问题标题】:invalid input syntax for type timestamp with time zone带有时区的时间戳类型的输入语法无效
【发布时间】:2020-10-13 20:31:08
【问题描述】:

我正在尝试将具有不同小时间隔的时间戳动态插入 Postgres (12.1)、NodeJS 10.15.3 和 Knex。

通过 Postico 直接插入 Postgres,NOW() + INTERVAL 'n hours' 格式可以正常工作:

insert into users (first_name, updated_at) 
values ('Bob', NOW() + INTERVAL '2 hours');

通过 Knex 插入时,

row.updated_at = `NOW() + INTERVAL '2 hours'`;

我收到错误:

invalid input syntax for type timestamp with time zone: "NOW() + INTERVAL '2 hours'"

通过query.toString()输出查询,我看到区间已经转换成

'NOW() + INTERVAL ''2 hours'''

我怎样才能以正确的格式插入它?

【问题讨论】:

  • 你能发布示例代码吗?

标签: node.js postgresql knex.js


【解决方案1】:

knex 正在将您的输入转换为string 并将其传递给数据库,它期望数据库将其解析为有效的时间戳。为避免 knex 将您的输入用双引号括起来,您需要将其指定为文字值。这样做的方法是使用raw

row.updated_at = knex.raw("NOW() + INTERVAL '2 hours'");

其中knex 是您用来实例化与数据库的连接的变量。

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 2019-02-11
    • 2020-03-30
    • 1970-01-01
    • 2020-11-13
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多