默认时区不适用于 postgres 中的续集查询

default timezone is not working for sequelize querys in postgres

我在使用 sequelize 创建连接时设置了时区,但在任何查询中都不起作用。

const sequelize = new Sequelize(
    process.env.DB_DATABASE,
    process.env.DB_USERNAME,
    process.env.DB_PASSWORD,
    {
        host:process.env.DB_HOST,
        dialect: 'postgres',
        timezone: '-03:00'
    }
);

await sequelize.query(
       `UPDATE public.usuarios set data_disponibilidade = now() where id_usuario = $id_usuario`,
       {
           bind: {
               id_usuario: id_operador,
           },
           type: QueryTypes.UPDATE,
       }
   );

now() 函数正在使用 00:00 时区,忽略了我之前设置的 -03:00。

更新:

我发现我的问题出在哪里了。列的类型是 timestamp with time zone。他忽略了我尝试设置的每个时区。甚至 'SET TIME ZONE 'America/Bahia'; ' 都没有在这个专门的专栏中工作。我更改了 timestamp without time zone 的类型,现在 timezone 选项也适用于此列。我只需要寻找其他 table 就可以看出这是 table.

中的一个孤立问题

您可以尝试以下操作吗:

UPDATE public.usuarios set data_disponibilidade = now() AT TIME ZONE '+3:00' where id_usuario = $id_usuario

您需要在 dialectOptions 属性 上设置 timezone 用于读取,将其设置在顶级选项上用于写入。

const sequelize = new Sequelize(
    process.env.DB_DATABASE,
    process.env.DB_USERNAME,
    process.env.DB_PASSWORD,
    {
        host: process.env.DB_HOST,
        dialect: 'postgres',
        dialectOptions: { // for reading
          useUTC: false,
          timezone: '-03:00',
        },
        timezone: '-03:00', // for writing
    }
);