如何在PostgreSQL中更改默认时间戳格式

时间:2017-11-02 21:51:30

标签: postgresql psql

我是PostgreSQL的新手,几年来在一家只使用MySQL的公司里,我对TIMESTAMP类型有点措手不及:

CREATE TABLE example (
    example_id SERIAL PRIMARY KEY,
    time_utc TIMESTAMP
);
INSERT INTO example (time_utc) VALUES (NOW());

SELECT * FROM example;

 example_id |          time_utc          
------------+----------------------------
          1 | 2017-11-02 21:37:26.592814

我知道我可以简单地将字段转换为不太精确的形式:

SELECT example_id, time_utc::timestamp(0)

我也知道我可以在表定义中声明精度:

time_utc TIMESTAMP(0)

但有没有办法将此更改为所有TIMESTAMP字段的默认精度?同样,有没有办法改变NOW()的行为以匹配这种格式(包括缺少时区)?

例如在MySQL中:

SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2017-11-02 21:41:26 |
+---------------------+

的PostgreSQL:

SELECT NOW();
              now              
-------------------------------
 2017-11-02 21:42:48.855801+00

老实说,我过去任何时候都无法想到我希望MySQL的时间戳更精确,而且不太精确的形式在客观上更容易看到。这是一个简单的配置更改,还是我需要在转换到PostgreSQL时进行处理和处理?

由于

1 个答案:

答案 0 :(得分:2)

  

用户可以使用SET datestyle选择日期/时间样式   命令,postgresql.conf中的DateStyle参数   配置文件,或PGDATESTYLE environment variable上的   服务器或客户端。

https://www.postgresql.org/docs/current/static/datatype-datetime.html#datatype-datetime-output

可用选项(掩码)也列在同一参考中。但他们可能无法准确提供您想要的东西。除此之外,你有to_char()函数

  

格式化函数to_char(参见第9.8节)也可用作   一种更灵活的格式化日期/时间输出的方法。

https://www.postgresql.org/docs/current/static/functions-formatting.html