在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) 并将其存储为朴素的时间戳 (未指定其时区的时间戳)。

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

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

相关推荐

  • css预编译器: center;}

    CSS预编译器是一种用于构建CSS的工具,它可以将CSS代码转换为更易于管理和维护的格式。它们可以使CSS代码更加灵活,更易于重用,并且可以帮助开发人员更轻松地组织和管理CSS代码。…

    2023-01-05 06:29:43
    0 92 88
  • linux切换到超级用户:```shecho 'Hello World' > hello_world.txt```

    Linux切换到超级用户的方法有两种:使用su命令:…

    2023-02-20 00:24:31
    0 52 44
  • xcode代码格式化快捷键:使用Command + I快速格式化Xcode代码

    格式化的方法格式化的方法Xcode代码格式化快捷键:Option+Command+F…

    2023-02-06 04:35:36
    0 81 49
  • plc和java哪个难学比较学习难度的对比

    PLC和Java哪个难学这个问题的答案取决于你的背景和目标。PLC是一种工业控制系统,它使用专用的编程语言来控制机器和设备。它的编程语言比较复杂,而且不同的厂家会有不同的语言,所以学习PLC的难度会比较大。而Java是一种通用的编程语言,它的语法比较简单,而且可以跨平台使用,所以学习Java的难度会比PLC要小一些。…

    2023-03-22 09:22:12
    0 81 83
  • linux的共享文件夹在哪个目录:Linux共享文件夹在/etc/samba目录下

    Linux的共享文件夹在/var/lib/samba/目录下,查看该目录下的文件可以使用以下代码:ls /var/lib/samba/…

    2023-01-21 15:31:10
    0 15 55
  • vb如何编写程序代码Private Sub Form_Load() ' 设置窗口标题 Me.Caption = He

    示例示例VB程序代码的编写是通过使用Visual Basic编程语言来实现的。下面是一个简单的VB程序代码示例:'示例代码…

    2023-03-14 15:57:06
    0 55 27
  • code键 A Guide to Success

    示例示例code键是一个特殊的键,它可以用来输入代码。它通常位于键盘的右上角,并且有一个特殊的图标,如“#”或“@”。下面是一个简单的代码示例,使用code键来输入代码:…

    2023-02-13 08:43:06
    0 88 45
  • type c接口是啥改变你的充电体验

    示例示例Type C接口是一种新型的USB连接器,它可以支持更高的数据传输速度,比传统的USB 0接口更快。与传统的USB接口不同,Type C接口可以在两端都使用,无需额外的翻转,使连接更加方便快捷。下面是一个使用Type C接口的代码示例:…

    2023-01-12 02:06:09
    0 84 91

发表评论

登录 后才能评论

评论列表(43条)