Postgres 时间戳

2023-12-21

我们正在争论在 postgres 中存储时间戳的最佳方式。目前,所有时间戳都存储为 +00,并且我们有一个与每个客户端关联的时区。我们查找时区并转换发生某事的时间,这增加了复杂性,因为我们需要进行更多的连接和更复杂的查询。

另一种方法是连接到 Postgres 并设置连接的时区,它会一直更改为该时区。

我的问题是 ANZ 有 4-5 个时区。当我们尝试开具发票时,我们需要知道某些交易发生在哪一天,而跨越三个时区并没有完美的解决方案。

我正在考虑在时间戳中包含时区以使其更容易 - TIMESTAMP '1999-01-15 8:00:00 -8:00'

我的印象是这是最佳实践,但有些人说这是一个坏主意。我们需要为 ANZ 各地的客户提供准确的发票,什么是最好、最优雅的解决方案?

干杯 斯科特


这里没有万无一失的解决方案。

我的第一个建议:永远不要依赖服务器的默认时区。

我的第二个建议:选择timestamp-timestamptz根据数据的(主要)语义。

更详细地说: PostgresSQL 有两个时间戳变体,名称容易混淆TIMESTAMP WITHOUT TIMEZONE (timestamp) and TIMESTAMP WITH TIMEZONE (timestamptz)。实际上,neither存储时区,甚至不存储偏移量。两种数据类型占用相同的宽度(4 个字节),并且它们的差异很微妙 - 更糟糕的是,如果您不完全理解它们并且您的服务器更改了时区,则可能会困扰您。我的理智规则集是:

  • Use TIMESTAMP WITH TIMEZONE (timestamptz)用于存储主要与“物理”时间,您主要感兴趣的是查询是否event 1之前是event 2(无论时区),或计算时间间隔(以“物理单位”,例如秒;而不是“民用”单位,如天月等)。典型的例子是记录创建/修改时间——“”这个词通常意味着什么时间戳".

  • Use TIMESTAMP WITHOUT TIMEZONE (timestamp)用于存储相关信息为的事件“民用时间”(也就是说,字段{year-month-day hour-min-sec}作为一个整体),并且查询涉及日历计算。在这种情况下,您将仅在此处存储“本地时间”,即相对于某些未指定(不相关、隐含或存储在其他地方)时区的日期时间。

第二个选项使您更容易查询“2013 年 1 月 20 日发生的所有事件”(在每个相应的地区/国家/时区),但使查询“2013 年 1 月 20 日发生的所有事件”变得更加困难。 (物理上)发生在参考事件之前”(除非我们知道它们位于同一时区)。你选。

如果您需要完整的内容,则两者都不够,您需要将时区或偏移量存储在附加字段中。另一种选择是存储这两个字段,这会浪费一些字节,但查询效率更高。

也可以看看这个答案 https://stackoverflow.com/questions/6627289/what-is-the-most-recommended-way-to-store-time-in-postgresql-using-java/6627999#6627999.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres 时间戳 的相关文章

  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • SQL Server 大小写/排序规则问题

    今天我在客户数据库中遇到了一个奇怪的情况 SQL Server 2005 数据库排序规则不区分大小写 因此我可以使用任何大小写编写 SQL 查询 没有任何问题 除了一个 一张特定表中的一个特定列称为 DeadZone 如果我这样查询 从表名
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • VBScript:从 Scripting.Dictionary 中对项目进行排序

    我有下面的代码 它获取这样的数据 姓名 1 姓名 4 姓名 2 姓名 3 并像这样列出 是一个复选框 姓名 1 姓名 4 姓名 2 姓名 3
  • PostgreSQL - 根据另一个单元格值设置默认单元格值

    如果我有一个专栏说column a任何给定值 我想要另一列column b有一个default value根据 的值column a 换句话说 if column a peter then column b default value do
  • 如何重命名 MySQL 数据库(更改架构名称)?

    如何快速重命名 MySQL 数据库 更改其架构名称 通常我只是转储数据库并使用新名称重新导入它 对于非常大的数据库来说 这不是一个选项 显然RENAME DATABASE SCHEMA db name TO new db name 做了坏事
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • Npgsql 参数化查询输出与 PostGIS 不兼容

    我在 Npgsql 命令中有这个参数化查询 UPDATE raw geocoding SET the geom ST Transform ST GeomFromText POINT longitude latitude 4326 3081
  • pg_dump 没有对象注释?

    有没有办法执行 pg dump 并排除表 视图和列的 COMMENT ON 我广泛使用 COMMENT ON 命令来描述所有对象 并且经常在其中包含换行符以获得更清晰的描述 例如 COMMENT ON TABLE mytable1 IS M
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • 如何更新 pl/sql 中嵌套表的列? [复制]

    这个问题在这里已经有答案了 我正在尝试在表中创建一个可以存储多个值的列 如下所示 我有一个学生id std和一个名为marks可以采用几个值 例如2 3 4 我想更新此列表以添加另一个标记2 3 4 5但我不知道怎么做 我如何更新专栏mar
  • 计算 mysql 数据库行数的最佳方法

    在遇到 mysql 查询加载时间慢的问题后 我现在正在寻找计算行数的最佳方法 我曾经愚蠢地使用过mysql num rows 函数来做到这一点 现在意识到这是最糟糕的方法 我实际上正在制作一个分页来用 PHP 制作页面 我找到了几种计算行数
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 部分唯一索引不适用于冲突子句 PostgreSQL

    表结构 create table example a id integer b id integer c id integer flag integer 部分索引 create unique index u idx on example a
  • 使用 NLog .NET Core 将日志记录到 PostgreSQL DB

    我尝试将日志记录集成到 NET Core 中的数据库 我能够设置 NLog 并将消息记录到 SQL Server 这很容易 但是当我尝试将 DB 切换到 PostgreSQL 时 似乎没有记录任何内容 以下是startup cs中的代码 p
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作

随机推荐

  • 合并重叠间隔并跟踪 BigQuery SQL 中的最大值

    我正在尝试解决一个问题 我想合并给定列 ID 的重叠间隔 但我也想跟踪每个重叠间隔的最大值 我有每个间隔的 start time 和 stop time 每个间隔都有一个与之关联的层次结构 优先级 这些是表中的以下列 id 开始时间 停止时
  • 每当 gem: 我设置 :output 但日志文件没有出现在我期望的位置

    In my schedule rb文件我有以下几行 set output log cron log log every 5 minutes do command echo hello end I ran whenever w正如这个问题所建
  • 如何让 Vim 突出显示匹配的括号?

    When I browse code in Vim I need to see opening and closing parenthesis brackets and pressing seems unproductive I tried
  • foreach 如何将对象转换为指定类型?

    我有一个问题foreach行为在C 我的自定义类实现了自定义GetEnumerator 该方法返回另一个object可以隐式转换为string 但是如果我这样做foreach string s in customClass 它在运行时失败
  • VFS:已达到文件最大限制 1231582

    我正在运行 Linux 2 6 36 内核 并且看到一些随机错误 像 ls error while loading shared libraries libpthread so 0 cannot open shared object fil
  • 使用扩展器进行 Knockout.js 验证 - 防止加载时验证

    我已经对 名字 实施了非常基本的必需验证 很大程度上基于淘汰赛网站上建议的示例 http knockoutjs com documentation extenders html http knockoutjs com documentati
  • 调整包含圆圈的图像映射的大小

    我正在尝试绘制下图中的所有数字 我已经完成了 但现在我想根据窗口的宽度动态调整图像和地图的大小 这是相关的html
  • 无法确定搁置数据库类型,whichdb 无法识别 gdb

    如果我尝试打开刚刚由 shelve 创建的文件 为什么 shelve 会引发错误 import shelve info file name Users bacon myproject temp test info info file she
  • 在结构中启动数组时遇到问题

    class CRA Account int tax 4 double refund 4 int SIN public CRA Account CRA Account CRA Account SIN 0 tax 4 0 refund 4 0
  • ASP.NET Core - System.Text.Json:如何拒绝有效负载中的未知属性?

    ASP NET Core 7 中的 Web API 与 System Text Json 我需要拒绝 PUT POST API 上的 JSON 有效负载 这些 API 指定了其他属性 这些属性不映射到模型中的任何属性 所以如果我的模型是 p
  • Angular UI Router - 使用 ui-sref 导航到动态状态时会出现双斜杠

    我正在创建一个 CMS 系统 因此我希望动态创建状态 由于您无法在配置阶段发出 http 请求 因此我决定在 run 函数中添加路由 如下所述 http blog brunscopelliti com how to defer route
  • 按列值过滤数据帧的行[重复]

    这个问题在这里已经有答案了 我有一个包含 10 列的数据框 一栏给出了鸟类的名称 实际上有 300 个物种 但我只对其中 200 个感兴趣 我只想保留这 200 个物种的信息 我的桌子截图 https i stack imgur com O
  • Hibernate中不同的保存方式有什么区别?

    Hibernate 有一些方法可以以某种方式获取您的对象并将其放入数据库中 它们之间有什么区别 何时使用哪个 为什么没有一种智能方法知道何时使用什么 到目前为止我已经确定的方法是 save update saveOrUpdate saveO
  • 转置一维 NumPy 数组

    我使用 Python 和 NumPy 并且在 转置 方面遇到一些问题 import numpy as np a np array 5 4 print a print a T 调用a T没有转置数组 如果a例如 然后它会正确转置 但我需要转置
  • 如何使用 scalaz.WriterT 记录 for 表达式?

    如何使用 scalaz WriterT 进行日志记录 关于 Monad 变压器 这是一个非常简短的介绍 您可能会找到更多信息哈斯克尔维基 http www haskell org haskellwiki Monad Transformers
  • 如何获取带有浅蓝色字段的 iPhone 地图应用程序蓝点当前位置?

    我认为标题是不言自明的 目前 当我为当前位置添加默认注释时 let currentAnnot MKPointAnnotation currentAnnot coordinate loc coordinate mainMap addAnnot
  • Eclipse kepler - 禁用 javascript 验证

    我刚刚安装了新的 eclipse kepler eclipse 4 3 它向我显示了来自第三方 javascript 库的数百个错误和警告 我尝试通过取消选中 首选项 JavaScript 验证器 中的 启用 JavaScript 语义验证
  • ptrdiff_t 太小?

    我一直想知道 不是吗ptrdiff t应该能够保存任意两个指针的差异根据定义 为什么当两个指针距离太远时会失败 我不是指任何特定的语言 我指的是具有这种类型的所有语言 例如 用地址减去指针1从带有地址的字节指针0xFFFFFFFF当你有 3
  • 在 AWS AMI Linux 服务器上设置 Supervisord [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在努力让主管工作以确保我的队列系统始终运行 以下是我从各种来源拼凑而成的步骤 以 root 或超级用户身份运行 1 easy inst
  • Postgres 时间戳

    我们正在争论在 postgres 中存储时间戳的最佳方式 目前 所有时间戳都存储为 00 并且我们有一个与每个客户端关联的时区 我们查找时区并转换发生某事的时间 这增加了复杂性 因为我们需要进行更多的连接和更复杂的查询 另一种方法是连接到