gpt4 book ai didi

javascript - Sequelize 为 Postgres 'timestamp with time zone' 列返回 null

转载 作者:行者123 更新时间:2023-11-29 13:39:24 25 4
gpt4 key购买 nike

我是 Sequelize 的新手,在从 Postgres 数据库获取 timestamp 数据时遇到了问题。到目前为止,我尝试过的所有操作都为所有 timestamp 字段返回 null

以下是相关列的 Postgres 定义:

created_date timestamp with time zone NOT NULL DEFAULT current_timestamp,
updated_date timestamp with time zone NOT NULL DEFAULT current_timestamp,

这些是我尝试在 Node.js 中定义模型相关部分的所有不同方法(对 updated_date 尝试了相同的方法):

created_date: {
type: Sequelize.DATE
defaultValue: Sequelize.NOW,
allowNull: false
},
created_date: {
type: 'TIMESTAMP',
defaultValue: sequelize.literal('CURRENT_TIMESTAMP'),
allowNull: false
},
created_date: {
type: 'timestamp with time zone',
defaultValue: sequelize.literal('current_timestamp'),
allowNull: false
},
created_date: {
type: Sequelize.STRING,
},

对于所有组合,Sequelize timestamp 属性已设置为 false(因为我们手动处理它们)。我也尝试将此值更改为 true 但没有成功。

最后,查询的结构如下(请注意我尝试访问以下列的两种不同方式):

data = await <MyModel>.findAll({
order: [['created_date', 'DESC']],
attributes: [
'id',
['created_date', 'createdDate'],
[models.sequelize.col('<my_table>.updated_date'), 'updatedDate'],
...
],
...
});

对于数据库中的两个 timestamp 值,所有尝试都返回了 null。我已验证数据库中的 timestamp 值确实存在并且不是 null。并且,所有其他数据库值都按预期返回。

使用 Sequelize v5.9.4

如果您能帮助追查此问题的根本原因,我们将不胜感激。我花了太多时间试图弄清楚这一点。提前致谢!

编辑 - 可能相关的更多信息:

以下是通过 Sequelize 运行原始查询返回的元数据:

 Field {
name: 'created_date',
tableID: XXXXX,
columnID: XX,
dataTypeID: 1184,
dataTypeSize: 8,
dataTypeModifier: -1,
format: 'text' },
Field {
name: 'updated_date',
tableID: XXXXX,
columnID: XX,
dataTypeID: 1184,
dataTypeSize: 8,
dataTypeModifier: -1,
format: 'text' },

最佳答案

我发布了我的团队经过几天的摸索和翻阅 Sequelize 文档后得出的解决方案。它需要将 timestamp 转换为 string 并使用 moment 在 JavaScript 中手动处理日期和时间。我不会在这里发布修复的 moment 部分,但是我们将 timestamp 转换为 string 的方式如下:

const data = await <MyModel>.findAll({
order: [['created_date', 'DESC']],
attributes: [
'id',
[sequelize.cast(sequelize.col('<my_table>.created_date'), 'String'), 'createdDate'],
[sequelize.cast(sequelize.col('<my_table>.updated_date'), 'String'), 'updatedDate'],
...
],
...
});

希望这能在将来为其他人节省一些时间!

关于javascript - Sequelize 为 Postgres 'timestamp with time zone' 列返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com