标签: timestamp

带有区域名称 PostgreSQL 错误的“AT TIME ZONE”?

我在回答这个stackoverflow问题时发现了奇怪的结果:

 select * from  pg_timezone_names where name = 'Europe/Berlin' ;
     name      | abbrev | utc_offset | is_dst 
---------------+--------+------------+--------
 Europe/Berlin | CET    | 01:00:00   | f
Run Code Online (Sandbox Code Playgroud)

和下一个查询

select id, 
  timestampwithtimezone, 
  timestampwithtimezone at time zone 'Europe/Berlin' as berlin, 
  timestampwithtimezone at time zone 'CET' as cet 
from data ;
 id  | timestampwithtimezone  |       berlin        |         cet         
 -----+------------------------+---------------------+---------------------
 205 | 2012-10-28 01:30:00+02 | 2012-10-28 01:30:00 | 2012-10-28 00:30:00
 204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
 203 | 2012-10-28 02:30:00+02 …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp timezone

12
推荐指数
2
解决办法
6020
查看次数

如何在 PostgreSQL 中生成日期序列?

如果您想生成时间序列,请参阅此问题

假设我想在两个日期之间生成一系列日期。我看到该功能generate_series仅提供

Function                                    Argument Type                         Return Type                                                               Description
generate_series(start, stop, step interval) timestamp or timestamp with time zone setof timestamp or setof timestamp with time zone (same as argument type) Generate a series of values, from start to stop with a step size of step
Run Code Online (Sandbox Code Playgroud)

那么我该怎么做呢?

postgresql timestamp timezone datetime date

12
推荐指数
1
解决办法
2万
查看次数

以毫秒为单位在数据库中存储时间

只是一个关于在数据库中存储“时间”的快速问题。我正在记录用户运行的时间,格式为 00:00:00:00(小时、分钟、秒、毫秒)。

我最初打算将它存储为,TIME但后来我意识到 MySQL 不支持这种类型的毫秒。

我将存储从用户秒表中获取的实际时间,而不是他们运行和完成的时间(这将在插入之前计算)。

最好使用的字段类型是什么?我在想doublefloat,但我不确定这会起作用吗?

mysql best-practices timestamp

10
推荐指数
2
解决办法
3万
查看次数

在 MySQL 中处理公元 1000 年之前日期的最佳方法?

我正在为公元 1000 年之前扩展的记录创建一个数据库,但 MySQL 日期和日期时间字段仅支持从 1000 开始的日期。

有没有比使用 bigint 类型使用 Unix 时间戳计算 1/1/1970 之前/之后的秒数或切换到支持更大日期范围的数据库软件更方便的方法?

mysql database-design best-practices timestamp date-format

9
推荐指数
2
解决办法
4455
查看次数

ISO 8601 允许的不精确日期值的单一数据类型

如何在 PostgreSQL 类型中以降低的精度存储日期和时间值,并使它们表现为日期和/或时间值

ISO 8601 允许精度降低的日期值。'1964', '1964-05', '1964-05-02' 都是值的有效表示,精度越来越高。Python 'datetime' 类型也允许以这种方式降低精度的值。

PostgreSQL 本机时间类型不允许降低精度

在原生日期类型中,日期的每个元素都必须存在,否则该值将被拒绝。将低于所需精度级别的元素设置为“00”也会失败。

=> SELECT CAST('1964-05-02' AS DATE);
    date    
------------
 1964-05-02
(1 row)

=> SELECT CAST('1964-05' AS DATE);
ERROR:  invalid input syntax for type date: "1964-05"
LINE 1: SELECT CAST('1964-05' AS DATE);
                    ^
=> SELECT CAST('1964' AS DATE);
ERROR:  invalid input syntax for type date: "1964"
LINE 1: SELECT CAST('1964' AS DATE);
                    ^
=> SELECT CAST('1964-00-00' AS DATE);
ERROR:  date/time field value out of range: …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes timestamp sql-standard

8
推荐指数
2
解决办法
2388
查看次数

在同一查询中将日期和时间戳与时区与 now() 进行比较?

我有多个数据库服务器,我正在使用将过期列与now(). 问题是服务器的过期列之一是timestamp with time zone,其余的都是date。我无法更改此设置,因为我没有管理员访问权限,而且实际上我只是在查询视图。Postgres 对我来说相当陌生,所以我真的不明白日期和时间是如何相互配合的。

当我尝试timestamp with time zone通过将timestampa转换为 a 来查询服务器时date

...
WHERE
    (
        status_code = '30000'
        OR status_code = '30005'
    )
AND CAST(expiration AS DATE) > now()
Run Code Online (Sandbox Code Playgroud)

它有效,但在expiration已经date失败的服务器上使用相同的查询:

[Err] 错误:类型日期的无效输入语法:“无结束日期”

任何帮助将不胜感激,我真的不想硬编码这个数据库服务器的异常。

postgresql datatypes timestamp date-format

8
推荐指数
1
解决办法
6万
查看次数

MySQL时间戳时区处理

时间戳数据类型是表示即时值还是年月日时分秒值?一个瞬间就是一个瞬间,就像你开始阅读这篇文章的那一刻一样,它可以用许多不同的 ymdhm-s+timezone 值来描述。没有时区,这是模棱两可的,同一时刻对我来说可能是 17:25,对其他人来说可能是 13:25。

这就是我认为我得到的。该current_timestamp函数返回当前时区的当前时间,所以这是一个明确的时刻,真正的now。在表中,它存储为 UTC,因此使用这个假定的时区,它也应该是明确的。

现在这是我不明白的:这是utc_timestamp函数的存在。我将 acurrent_timestamp和 an存储utc_timestamp在同一列中,它们是不同的。这个函数甚至不应该存在,我不明白为什么它代表不同的时刻。

mysql timestamp timezone

8
推荐指数
2
解决办法
5万
查看次数

有没有办法在 Postgres 中获取事务提交时间戳?

我有数据拉取功能,可以在 5 秒内根据modified_timestamp列从 Postgres 表中抓取所有数据。它的工作方式如下:

  1. SELECT * FROM my_table WHERE modified_timestamp > _some_persisted_timestamp
  2. _some_persisted_timestamp = CURRENT_TIMESTAMP
  3. 处理从步骤 1接收到的数据
  4. 睡眠 5 秒
  5. 转到步骤 1

其中modified_timestamp使用触发器更新(在任何行更新modified_timestamp变为 之后CURRENT_TIMESTAMP)。它工作正常,直到我注意到CURRENT_TIMESTAMPPostgres 实际上是事务开始时间戳并且一些更新丢失了。他们为什么会迷路?这很简单 - 在我执行查询时,SELECT * FROM my_table WHERE modified_timestamp > _some_persisted_timestamp一些更改已经发生,但modified_timestamp在更新_some_persisted_timestamp之前,因为事务仍在进行中。

当更新对其他事务可见(换句话说,事务提交时间戳)而不是 CURRENT_TIMESTAMP 或 clock_timestamp()时,可以通过在步骤 2 中 分配时间戳来轻松解决此问题。

我阅读了文档,但没有发现与事务提交时间戳相关的任何内容。你能不能给点建议?

顺便说一句,我知道逻辑解码,我知道这种机制在理论上更适合我的需求,但有一些实际问题不允许我使用它。

postgresql timestamp

8
推荐指数
1
解决办法
6037
查看次数

在某些情况下,遵循 thomas 写入规则的时间戳协议是否允许不可视图序列化的计划?

我在教科书(Avi Silberschatz、Henry F. Korth 和 S. Sudarshan $6e$ 的《数据库系统概念教科书》)中遇到了以下行。686:

Thomas 的写入规则允许不可冲突序列化但仍然正确的调度。那些允许的非冲突可序列化调度满足视图可序列化调度的定义(参见示例框)。

我从上面几行中了解到,遵循 Thomas 的写入规则的时间戳协议生成的每个时间表都是视图可序列化的。

现在让我们采用以下小时间表:$S:R_1(X)、W_2(X)、W_1(X)$。

这个时间表 $S$ 在时间戳协议下是允许的,该协议遵循 Thomas 的写入规则。

并且序列化顺序是 $R_1(X), W_1(X).$

但我无法证明它是视图可序列化的。

其实我认为它是非视图可序列化的,因为,

  1. 考虑串行顺序为 $T_1, T_2$

    现在 $X$ 的最终值由 $T_2$ 写入。所以不等价。

  2. 下一个替代序列是 $T_2, T_1$

    在这里,$R_1(X)$ 将读取由 $T_1$ 写入的 $X$ 的值,而不是在两个事务开始之前存在的原始值。所以这也不是视图等价的。

这里出了什么问题?请帮我解决这个问题。

concurrency timestamp serialization protocol

7
推荐指数
1
解决办法
268
查看次数

如何对 DML 语句的 RETURNING 子句返回的行进行排序?

我正在使用此语句以升序获取按时间戳排序的所有行

DELETE FROM @tableName
        WHERE id = ANY (
            SELECT id
            FROM @tableName
            WHERE source = :p1 AND target = :p2 @readCondition
            ORDER BY createddate
            LIMIT @limit
            FOR UPDATE SKIP LOCKED
        )
        RETURNING *;
Run Code Online (Sandbox Code Playgroud)

我得到了这些结果:

"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.230886"

"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.279604"

"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.276191"
"MessageType":"AssignmentChange.v1","CreatedDate":"2019-12-05T10:55:22.202338"
Run Code Online (Sandbox Code Playgroud)

如您所见,它们没有按 排序createdate。有没有办法对子RETURNING句中的行进行排序?

postgresql timestamp

7
推荐指数
1
解决办法
124
查看次数