当前位置: 首页 > 知识库问答 >
问题:

同步引擎没有时区还是不在PostgreSQL中?

盖向荣
2023-03-14

首先,我读了很多关于Postgres中的日期类型是否使用时区的文章。似乎在99%的情况下,用时区管理日期(时间戳)是最好的。

目前,我已经构建了一个同步引擎,使用默认设置为UTC时间的Rails应用程序(非常重要)和管理日期的MariaDB(因此UTC日期被写在数据库中,但除了日期:2017-04-19 17:45:09之外看不到任何东西)。与服务器引擎同步的设备也使用日期为UTC的本地SQLite数据库。因此,对于同一文档,我可以在SQLite字段和MariaDB字段中看到相同日期的created_at字段。效果很好。

请注意,用户不必在服务器应用程序和设备应用程序中设置自定义时区。我要所有UTC。

由于许多原因,我计划迁移到PostgreSQL中,所以我非常肯定我也需要使用不带时区的时间戳,但是在阅读了所有这些之后,我有些怀疑。

你对这个用例有什么建议?

编辑:

所以我用PGLOADER做了3个测试:

test1:MariaDB=>PostgreSQL使用计算机默认时区

日期是相同的,但正如你所看到的,有时是+01,有时是+02???

test2:MariaDB=>PostgreSQL在Postgres中将时区设置为UTC后使用时区

这里有+00,对UTC来说是合乎逻辑的,但是我的日期被更改了。

test3:MariaDB=>PostgreSQL使用不带时区的时间戳

那里都一样。

共有2个答案

柯清野
2023-03-14

尝试在配置文件中使用其中之一

 SET timezone= 'UTC' 
 SET client_timezone TO '+00:00'

我的全部设置是:

LOAD DATABASE
     FROM   mysql://usr@localhost/kk
     INTO   postgresql://usr:pwd@localhost/kk
     WITH include drop,
         create tables,
         create indexes,
         reset sequences,
         workers = 8, concurrency = 1,
         multiple readers per thread, rows per range = 50000
     SET PostgreSQL PARAMETERS
        maintenance_work_mem to '512MB',
        work_mem to '64MB',
        timezone to  'UTC'
     SET MySQL PARAMETERS
        net_read_timeout = '220',
        net_write_timeout = '220'
     SET timezone= 'UTC' 
     SET client_timezone TO '+00:00'
     ALTER SCHEMA 'kk' RENAME TO 'public'
;
养昊天
2023-03-14

“with timezone”只是告诉postgres在存储时间戳之前从本地时间转换为UTC,并在查询时转换回本地时间。底层数据存储在UTC中,实际数据中没有存储时区信息,它只是DB用来确定如何转换数据以供用户使用的一个标志。

如果您的客户机连接在DB连接时将PG时区设置为UTC,则几乎没有区别。传统的看法是总是使用时间戳和时区,因为这将使其他系统(postgresql客户端)中的查询在将来更加灵活和易于使用。

 类似资料:
  • 问题内容: 我对诺言有很多困惑。是同步还是异步? 问题答案: 传递函数 为 无极构造同步运行,但任何依赖于它的分辨率将异步调用。即使promise立即解决,任何处理程序都将异步执行(类似于when )-主线程首先运行到末尾。 不管您的Javascript环境如何,都是如此-无论您是在Node还是浏览器中。

  • 我目前正在阅读Trevor Burnham的Async Javascript。到目前为止这是一本很棒的书。 他谈到这个片段和console.log在Safari和Chrome控制台中是“异步”的。不幸的是我无法复制这个。代码如下: 如果这是异步的,我会预期结果是books的结果。将console.log()放在事件队列中,直到所有代码执行完毕,然后运行它,它将具有bar属性。 虽然它是同步运行的,

  • 问题内容: 我意识到这是一个基本问题,但是我在其他地方找不到答案。 是同步还是异步? 万一它是异步的,是否有可能在传播了动作之后添加一个回调,这是可能的? 问题答案: AFAIK,调度动作是同步的。如果您愿意解决异步调用,则可以在redux中使用thunk- middleware ,其中将dispatch作为回调函数提供,您可以根据需要调用它。

  • 我想每隔两分钟运行一次cron,0,2,4,6,8。。。。每个cron执行运行2分钟。 我用synchronized配置了cron schedule,如下所示。但我仍然看到调度程序的行为似乎是同步的,而不是给定的。 克朗被安排在 0-2第一个cron 4-6秒cron 8-10第三个cron Cron计划程序在最后一次执行Cron后等待2分钟。 如果我正确理解synchronized,那么添加它是

  • 我试图找出如何在事务上下文中正确处理原子级的对Kafka的多次写入。在此场景中,事务不是由kafka消息侦听器启动的,而是通过@Transactional注释以编程方式启动的,请参见下面的代码段。 我使用的是spring boot 2.4.2和spring kafka 2.6.5。 KafkaProducer文档指出,在事务上下文中,不需要调用。get(),因为它最终会在尝试提交事务时引发异常。此