我如何使默认时间戳列的行为?

我试图强制这些列做两件事情:

  1. 使用“没有时区的时间戳”(后端是Postgres)。
  2. 实际上将后台的默认设置为“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.'; 

但是,我找不到任何有关如何强制这是一个时间戳的文档,或者我可以如何使默认的“now()在时区”utc'“。

这两者中的哪一个可能?

如果可能的话,是否可以将时间戳设置为false并手动定义列来完成?

显然这个问题的后半部分有一个相当优雅的解决scheme。 Sequelize提供了一个“文字”方法,允许您(除其他外)完全按照您的喜好设置默认值。

 { // a bunch of column definitions createdAt: { type: DataTypes.DATE, defaultValue: sequelize.literal("(now() at time zone 'utc')") } }, 

我用双引号包装它,因为Postgres需要在后端的“utc”周围单引号。

当然,尤里是正确的,在Sequelize中没有“没有时区”数据types,也没有任何选项来configuration数据types。 我知道部分答案是不鼓励在这里,但认为这可能会帮助其他人。

当你设置你的sequelize实例时,你可以将options.timezone设置为UTC,它为所有的sequelize连接设置时区,这意味着每个NOW()调用将以UTC为单位。 这也可以使用默认的时间戳。 查看文档: http : //sequelize.readthedocs.org/en/latest/api/sequelize/

另外,你可以修改你的postgresql.conf,并在那里默认时区。