如何在 postgresql 上使用 unix 时间戳

Mat*_*lva 6 php postgresql unix-timestamp

我必须使用 postgres 数据库 9.4,我想使用时间戳。第一个“问题”是,当我在 postgres 上创建时间戳列时,我不知道它在内部做了什么,但是当我查询时它返回 '2010-10-30 00:00:00'

对我来说,时间戳类似于 12569537329(unix 时间戳)。

我说因为是整数或浮点数,计算机比字符串更容易处理,每个国家都有自己的时间格式,unix时间戳是一个数字和故事的结尾。

从 php 查询结果是一个字符串,所以我必须做一堆杂耍,因为时区、夏令时和其他事情可能会出错。

我搜索了很多,但找不到在 postgresql 上使用 unix 时间戳的方法。

有人可以解释一下是否有办法或正确的工作方式并尽可能接近 unix 时间戳。

更新

我发现它会帮助我并且需要很长时间才能发现在 postgresql 上可行的一件事是更改Interval Output

手册

在 php 中,月份的日期间隔是“月”,因为 pg 在 php 上是“星期一”,它会将 mon 理解为星期一。我认为,如果你必须玩得太多,那你就做错了。很高兴 postgres 让我们改变会话或永久的行为。所以设置intervalstyleiso_8601它会工作作为PHP ISO_8601和将输出P1M

wil*_*ser 4

只需将 unixtime_t与时间戳进行转换,然后在 postgres 中使用它:

CREATE TABLE omg
        ( seq SERIAL NOT NULL PRIMARY KEY
        , stampthing TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
        );

INSERT INTO omg(stampthing) SELECT now();

INSERT INTO omg(stampthing) VALUES
 ('epoch'::timestamptz )
 , ('epoch'::timestamptz + 12569537329 * '1 second'::interval)
        ;

SELECT stampthing
        , DATE_PART('epoch',stampthing) AS original
FROM omg;
Run Code Online (Sandbox Code Playgroud)

输出:

CREATE TABLE
INSERT 0 1
INSERT 0 2
          stampthing           |     original     
-------------------------------+------------------
 2016-01-20 16:08:12.646172+01 | 1453302492.64617
 1970-01-01 01:00:00+01        |                0
 2368-04-24 20:08:49+02        |      12569537329
(3 rows)
Run Code Online (Sandbox Code Playgroud)