我试图强制这些列做两件事:
实际上将后端的默认值设置为“now / utc”。
{
// a bunch of column definitions
createdAt: { type: DataTypes.DATE, defaultValue: sequelize.fn('now') }
},
{
timestamps: false,
comment: "this isn't even the real comment"
}
结果如下:
CREATE TABLE IF NOT EXISTS "common"."images" ("id" VARCHAR(255) , "imageType"
VARCHAR(255), "mimeType" TEXT, "source" VARCHAR(255), "path" TEXT UNIQUE,
"createdAt" TIMESTAMP WITH TIME ZONE DEFAULT now(), PRIMARY KEY ("id"));
COMMENT ON TABLE "common"."images" IS 'blah blah blah.';
但是,我找不到任何关于如何强制将其设为timestamp-without-tz的文档,或者我如何在时区'utc'处设置默认的“now()”。
这些都可能吗?
如果可能,可以不将时间戳设置为false并按照我的方式手动定义列来完成吗?
答案 0 :(得分:2)
显然,对于这个问题的后半部分,有一个相当优雅的解决方案。 Sequelize提供了一种“文字”方法,允许您(除其他外)完全按照您的意愿制作默认值。
{
// a bunch of column definitions
createdAt: { type: DataTypes.DATE, defaultValue: sequelize.literal("(now() at time zone 'utc')") }
},
我用双引号括起来,因为Postgres希望在后端的“utc”周围加上单引号。
当然,Yuri是正确的,因为Sequelize中没有“没有时区”的数据类型,也没有任何以这种方式配置数据类型的选项。我知道这里不鼓励部分答案,但认为这可能有助于其他人。
答案 1 :(得分:1)
设置续集实例时,可以将options.timezone设置为UTC,设置所有续集连接的时区,这意味着每个NOW()调用都是UTC。这也适用于默认时间戳。请参阅文档:http://sequelize.readthedocs.org/en/latest/api/sequelize/
或者,您可以修改postgresql.conf并在那里默认时区。
答案 2 :(得分:0)
您可以使用力矩库来创建时间戳:
createdAt: {
type: DataTypes.NOW,
allowNull: false,
defaultValue: moment.utc().format('YYYY-MM-DD HH:mm:ss'),
field: 'createdAt'
},
updatedAt: {
type: DataTypes.NOW,
allowNull: false,
defaultValue: moment.utc().format('YYYY-MM-DD HH:mm:ss'),
field: 'updatedAt'
}
此外,您可以在模型配置中将时间戳记设置为true,以便在数据库中创建行时自动更新时间戳记。
const orderDetails = sequelize.define('orderDetails', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
itemId: {
type: DataTypes.INTEGER,
allowNull: false,
field: 'item_id'
}
quantity: {
type: DataTypes.FLOAT,
allowNull: false,
field: 'quantity'
},
itemDescription: {
type: DataTypes.STRING(128),
allowNull: false,
defaultValue: ' ',
field: 'item_desc'
},
createdAt: {
type: DataTypes.NOW,
allowNull: false,
defaultValue: moment.utc().format('YYYY-MM-DD HH:mm:ss'),
field: 'createdAt'
},
updatedAt: {
type: DataTypes.NOW,
allowNull: false,
defaultValue: moment.utc().format('YYYY-MM-DD HH:mm:ss'),
field: 'updatedAt'
},
}, {
tableName: 'order_details',
timestamps: true,
});