Sequelize 默认查询设置时区和 client_min_messages

3

我有一个关于查询的问题:

SET client_min_messages TO warning;SET TIME ZONE INTERVAL '+00:00' HOUR TO MINUTE;

当我在postgres中执行查询:select query from pg_stat_activity时,经常会在执行我定义的查询之前看到这个查询。我想禁用这个查询。我的列具有带有时区的时间戳,但我的默认时区是UTC。我该怎么做才能删除它?这会影响性能吗?

1个回答

5

SET 用于设置运行时参数,而不是查询数据库。我甚至不能使用 SET 运行 EXPLAIN ANALYZE;根据程序的复杂性,预计时间应该类似于最短的查询。我怀疑它对性能产生了有意义的影响,但当然,会传递和解析一些字节。

这些命令来自 Sequelize 的 connection-manager.js。它们在初始化连接时生成,并且通过此方式:

if (this.sequelize.options.clientMinMessages !== false) {
  query += `SET client_min_messages TO ${this.sequelize.options.clientMinMessages};`;
}

if (!this.sequelize.config.keepDefaultTimezone) {
  const isZone = !!moment.tz.zone(this.sequelize.options.timezone);
  if (isZone) {
    query += `SET TIME ZONE '${this.sequelize.options.timezone}';`;
  } else {
    query += `SET TIME ZONE INTERVAL '${this.sequelize.options.timezone}' HOUR TO MINUTE;`;
  }
}

因此,在选项对象中,您可以使用clientMinMessages: false, keepDefaultTimezone: true调用new Sequelize() (这里是clientMinMessages; keepDefaultTimezone文档较少)。
我尚未对此进行过调优。如果已经设置了UTC时区,则keepDefaultTimezone似乎是安全的。请注意,如果Sequelize没有将postgres client_min_messages设置为WARNING,则postgres可能会默认为稍低的通知阈值NOTICE并向Sequelize发送一些额外的消息。是否值得追求这些微调取决于您的系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接