在PostgreSQL中使用UTC中的当前时间作为默认值

我有一个TIMESTAMP WITHOUT TIME ZONE类型的列,并希望将其默认为 UTC 中的当前时间。

我有一个TIMESTAMP WITHOUT TIME ZONE类型的列,并希望将其默认为 UTC 中的当前时间。

postgres=# select now() at time zone 'utc';
          timezone          
----------------------------
 2013-05-17 12:52:51.337466
(1 row)

与使用列的当前时间戳一样:

postgres=# create temporary table test(id int, ts timestamp without time zone default current_timestamp);
CREATE TABLE
postgres=# insert into test values (1) returning ts;
             ts             
----------------------------
 2013-05-17 14:54:33.072725
(1 row)

但这使用本地时间。试图将其强制为 UTC 会导致语法错误:

postgres=# create temporary table test(id int, ts timestamp without time zone default now() at time zone 'utc');
ERROR:  syntax error at or near "at"
LINE 1: ...int, ts timestamp without time zone default now() at time zo...
396

甚至不需要函数。只需在默认表达式周围加上括号:

create temporary table test(
    id int, 
    ts timestamp without time zone default (now() at time zone 'utc')
);
114

另一种解决方案:

timezone('utc', now())
36

将其包装在一个函数中:

create function now_utc() returns timestamp as $$
  select now() at time zone 'utc';
$$ language sql;
create temporary table test(
  id int,
  ts timestamp without time zone default now_utc()
);
20

那么...怎么样

now()::timestamp

如果您的其他时间戳没有时区,则此强制转换将产生当前时间的匹配类型“时间戳没有时区”。

我想阅读别人对这个选项的看法。我仍然不相信我对这个“有 / 没有”时区内容的理解。

编辑:在这里添加 Michael Ekoka 的评论,因为它澄清了一个重要的观点:

警告。问题是关于在 UTC 中为不存储时区的时间戳列生成默认时间戳 (可能是因为如果您知道所有时间戳共享相同,则不需要存储时区)。您的解决方案是生成本地时间戳 (对于大多数人来说,不一定会设置为 UTC) 并将其存储为朴素的时间戳 (未指定其时区的时间戳)。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(254)
要为.NET6服务器项目安装哪个SignalR包
上一篇
如何获取鼠标单击画布元素的坐标 (mouse click)
下一篇

相关推荐

  • zip postal code是什么意思了解如何获取和使用它

    示例示例zip postal code是邮政编码的简称,是由一系列数字和字母组成的一种地址编码,可以用来标识某一特定地址。例如:…

    2023-08-18 12:36:27
    0 67 98
  • postman测试websocket接口:测试WebSocket API的Postman实践

    Postman是一种API测试工具,可以用来测试WebSocket接口。下面是一个使用Postman测试WebSocket接口的示例代码:…

    2023-05-08 14:42:58
    0 96 49
  • postman测试webservice接口:查看返回结果,判断接口是否正常工作。

    示例示例Postman 是一款功能强大的 API 测试工具,可以用来测试 接口。安装 Postman:…

    2023-09-11 10:56:51
    0 76 51
  • postal code怎么填:如何使用邮政编码获取地址信息

    示例示例postal code是指邮政编码,一般用于表示某个地区的邮件分发中心,在国外,它也被称为zip code或。填写postal code时,应该根据所在地区的邮政编码来填写,通常是一个6位数字,其中前两位代表省份,中间两位代表城市,最后两位代表县/区。…

    2023-02-28 04:47:05
    0 41 86
  • compost是什么意思:如何利用有机堆肥提高土壤肥力

    Compost是一种组件化的前端框架,它允许开发者使用React组件来构建可复用的UI组件。它的目标是使开发更快捷,提高代码的可维护性和可重用性。…

    2023-08-05 06:02:54
    0 45 82
  • compost翻译:堆肥

    Compost是一种前端框架,它使用CSS和JavaScript来帮助开发者快速构建响应式Web应用程序。它的核心思想是使用简单的组件来构建复杂的用户界面,从而节省时间和精力。…

    2023-02-24 03:22:45
    0 96 54
  • Postman接口测试实例:使用Postman测试VSCode

    关于Postman接口测试实例的问题,在visual code postman中经常遇到,我正在关注 Ian Munro 在 YouTube 上的 1702-express-review 视频,作为我的工作培训的一部分。我以前从未使用过 Postman。我需要以某种方式将我的 VSCode 链接到 Postman,但不确定如何。…

    2022-12-03 09:57:24
    0 11 30
  • Cole par mer:检查Antemerdiem和 postmerdiem

    关于Cole par mer的问题,在ante post meridiem中经常遇到,我已经习惯了 Java 8 提供的 LocalTime,用于在以下代码中将时间从 1-24 格式格式化为 1-12 格式。…

    2022-12-27 01:25:41
    0 22 47

发表评论

登录 后才能评论

评论列表(56条)