在一个postgres查询中多次调用`now()`会不会给出相同的结果?

Vik*_*sad 6 sql database postgresql persistence relational-database

我想在表中插入一行:

INSERT INTO some_table VALUES (now(), now());
Run Code Online (Sandbox Code Playgroud)

我希望两列中的日期值相等.以上查询对此要求是否安全?或者我应该使用其他替代方法,如子查询/ CTE:

INSERT INTO some_table (select t.now, t.now from (select now()) as t);
Run Code Online (Sandbox Code Playgroud)

一般来说,这些函数如何在SQL内部调用?如何调用函数的序列(从左到右/从右到左)?是否只调用一次给定函数并为单个查询缓存返回值?它是供应商特定的吗?

任何阅读链接都非常受欢迎.

And*_*mar 10

文件说,有关now():

now()是一个等同于transaction_timestamp()的传统PostgreSQL

关于transaction_timestamp():

这些SQL标准函数都根据当前事务的开始时间返回值

因此,在一个SQL语句中,now()将始终返回相同的值.

  • SQL 是“声明性的”。SQL 说明您想要什么。查询计划器可以任意顺序或任意次数执行函数,只要它返回正确的结果即可。 (3认同)