苏州高端网站建设公司哪家好,如何引用404做网站,汕头网站开发服务,关键词的分类和优化概述开发数据库应用或者调试代码时#xff0c;经常需要获取系统的当前日期和时间#xff0c;今天主要看一下 PostgreSQL 中提供的相关函数。一、当前日期CURRENT_DATECURRENT_DATE 函数用于获取数据库服务器的当前日期#xff1a;postgres# SELECT CURRENT_DATE;调用该函数时…概述开发数据库应用或者调试代码时经常需要获取系统的当前日期和时间今天主要看一下 PostgreSQL 中提供的相关函数。一、当前日期CURRENT_DATECURRENT_DATE 函数用于获取数据库服务器的当前日期 postgres# SELECT CURRENT_DATE;调用该函数时不需要在函数名后加括号。该日期是服务器的日期不是客户端的日期。二、当前事务开始时间以下函数可以用于获取数据库服务器的当前时间--前面 4 个函数用于获取时间后面 4 个函数用于获取时间戳--CURRENT_TIME 和 CURRENT_TIMESTAMP 包含时区信息--LOCALTIME 和 LOCALTIMESTAMP 不包含时区信息--precision 用于指定小数秒的位数取值为 0 - 6默认为 6CURRENT_TIMECURRENT_TIME(precision)LOCALTIMELOCALTIME(precision) CURRENT_TIMESTAMPCURRENT_TIMESTAMP(precision)LOCALTIMESTAMPLOCALTIMESTAMP(precision)例子postgres# SELECT CURRENT_TIME, LOCALTIME, CURRENT_TIMESTAMP, LOCALTIMESTAMP;postgres# SELECT CURRENT_TIME(3), LOCALTIME(3), CURRENT_TIMESTAMP(3), LOCALTIMESTAMP(3);注意上面所有的函数包括 CURRENT_DATE返回的都是当前事务开始的时间。在同一个事务期间多次调用相同的函数将会返回相同的值结果不会随着时间增加。这一点与其他数据库的实现可能不同。以下示例使用 pg_sleep 函数暂停 3 秒再次获取当前时间postgres# BEGIN;postgres# SELECT CURRENT_TIMESTAMP;postgres# SELECT pg_sleep(3);postgres# SELECT CURRENT_TIMESTAMP;postgres# COMMIT;可以发现在事务中两次获取的时间相同。三、当前语句开始时间PostgreSQL 还提供了其他获取时间的函数transaction_timestamp()statement_timestamp()clock_timestamp()timeofday()now()1、transaction_timestamp()transaction_timestamp() 等价于 CURRENT_TIMESTAMP但是作用更加明确。2、statement_timestamp()返回当前语句的开始时间更准确地说应该是接收到客户端最新命令的时间。statement_timestamp() 和 transaction_timestamp() 对于事务中的第一个命令返回的结果相同但随后再执行 statement_timestamp() 将会返回不同的值。postgres# BEGIN;postgres# SELECT statement_timestamp();postgres# SELECT pg_sleep(3);postgres# SELECT statement_timestamp();postgres# COMMIT;当我们在存储过程(Stored Procedure)中进行调试时通常需要打印不同语句消耗的时间此时就需要使用 statement_timestamp()而不能使用 CURRENT_TIMESTAMP 或者 transaction_timestamp()3、clock_timestamp()clock_timestamp() 返回当前实际的时间即使在同一个 SQL 语句中也可能返回不同的值 postgres# SELECT clock_timestamp() FROM generate_series(1,10);查询语句在 1 秒钟内返回了 10 条记录但是每条记录产生的时间都不相同。4、timeofday()timeofday() 是 PostgreSQL 中一个历史遗留函数。它与 clock_timestamp() 一样返回当前实际时间但是返回类型是一个格式化的字符串而不是 timestamp with time zone postgres# SELECT timeofday() FROM generate_series(1,10);5、now()now() 是 PostgreSQL 中与 transaction_timestamp() 等价的一个传统函数同一个事务中的结果不会改变postgres# BEGIN;postgres# SELECT now();postgres# SELECT pg_sleep(3);postgres# SELECT now();postgres# COMMIT;另外所有的日期/时间数据类型都支持使用字面值now指定当前日期和时间(当前事务开始时间)。四、延迟执行以下函数可以用于延迟服务器进行的操作pg_sleep(seconds)pg_sleep_for(interval)pg_sleep_until(timestamp with time zone)pg_sleep 将当前会话的进行暂停指定的秒数。seconds 的类型为 double precision所以支持小数秒。我们在面前使用了该函数。pg_sleep_for 执行一个延迟的时间间隔通常用于指定一个较大的延迟。pg_sleep_until 可以用于指定一个进程的唤醒时间。以下示例分别暂停 1.5 秒、5 分钟以及直到明天 3 点SELECT pg_sleep(1.5);SELECT pg_sleep_for(5 minutes);SELECT pg_sleep_until(tomorrow 03:00);暂停时间的精度取决于不同平台的实现通常可以达到 0.01 秒。延迟效果最少会满足指定的值但有可能由于其他因素导致更长例如服务器负载过高。尤其对于 pg_sleep_until不能保证在完全准确的指定时间唤醒进程但是也不会提前唤醒。注意使用这些延迟函数时确保当前会话没有锁定过多的资源否则其他会话将会一直等待导致系统性能的下降。觉得有用的朋友多帮忙转发哦后面会分享更多devops和DBA方面的内容感兴趣的朋友可以关注下~