I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
9.9. 时间/日期函数和操作符
表9-26显示了 PostgreSQL 里可以用于处理日期/时间数值的函数,随后一节里描述了细节。表9-25演示了基本算术操作符的行为。而与格式化相关的函数,可以参考节9.8。你应该很熟悉节8.5的日期/时间数据类型的背景知识。
所有下述函数和操作符接收的 time
或 timestamp
输入实际上都来自两种可能:一种是接收 time with time zone
或 timestamp with time zone
,另外一种是接收 time without time zone
或 timestamp without time zone
。出于简化考虑,这些变种没有独立显示出来。还有,+
和 *
操作符都是以可交换的操作符对(比如,date + integer 和 integer + date);我们只显示了这样的交换操作符对中的一个。
表9-25. 日期/时间操做符
操作符 | 例子 | 结果 |
---|---|---|
+ | date '2001-09-28' + integer '7' | date '2001-10-05' |
+ | date '2001-09-28' + interval '1 hour' | timestamp '2001-09-28 01:00:00' |
+ | date '2001-09-28' + time '03:00' | timestamp '2001-09-28 03:00:00' |
+ | interval '1 day' + interval '1 hour' | interval '1 day 01:00:00' |
+ | timestamp '2001-09-28 01:00' + interval '23 hours' | timestamp '2001-09-29 00:00:00' |
+ | time '01:00' + interval '3 hours' | time '04:00:00' |
- | - interval '23 hours' | interval '-23:00:00' |
- | date '2001-10-01' - date '2001-09-28' | integer '3' |
- | date '2001-10-01' - integer '7' | date '2001-09-24' |
- | date '2001-09-28' - interval '1 hour' | timestamp '2001-09-27 23:00:00' |
- | time '05:00' - time '03:00' | interval '02:00:00' |
- | time '05:00' - interval '2 hours' | time '03:00:00' |
- | timestamp '2001-09-28 23:00' - interval '23 hours' | timestamp '2001-09-28 00:00:00' |
- | interval '1 day' - interval '1 hour' | interval '1 day -01:00:00' |
- | timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' | interval '1 day 15:00:00' |
* | 900 * interval '1 second' | interval '00:15:00' |
* | 21 * interval '1 day' | interval '21 days' |
* | double precision '3.5' * interval '1 hour' | interval '03:30:00' |
/ | interval '1 hour' / double precision '1.5' | interval '00:40:00' |
表9-26. 日期/时间函数
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|---|---|---|---|
| interval | 减去参数后的"符号化"结果 | age(timestamp '2001-04-10', timestamp '1957-06-13') | 43 years 9 mons 27 days |
| interval | 从 current_date 减去参数后的结果 | age(timestamp '1957-06-13') | 43 years 8 mons 3 days |
| timestamp with time zone | 实时时钟的当前时间戳;见节9.9.4 | ||
| date | 当前的日期;见节9.9.4 | ||
| time with time zone | 当日时间;见节9.9.4 | ||
| timestamp with time zone | 当前事务开始时的时间戳;见节9.9.4 | ||
| double precision | 获取子域(等效于 extract );又见节9.9.1 | date_part('hour', timestamp '2001-02-16 20:38:40') | 20 |
| double precision | 获取子域(等效于 extract );又见节9.9.1 | date_part('month', interval '2 years 3 months') | 3 |
| timestamp | 截断成指定的精度;又见节9.9.2 | date_trunc('hour', timestamp '2001-02-16 20:38:40') | 2001-02-16 20:00:00 |
| double precision | 获取子域;又见节9.9.1 | extract(hour from timestamp '2001-02-16 20:38:40') | 20 |
| double precision | 获取子域;又见节9.9.1 | extract(month from interval '2 years 3 months') | 3 |
| boolean | 测试是否为有穷时间戳 | isfinite(timestamp '2001-02-16 21:28:30') | true |
| boolean | 测试是否为有穷时间间隔 | isfinite(interval '4 hours') | true |
| interval | 按照每月 30 天调整时间间隔 | justify_days(interval '30 days') | 1 month |
| interval | 按照每天 24 小时调整时间间隔 | justify_hours(interval '24 hours') | 1 day |
| interval | 使用 justify_days 和 justify_hours 调整时间间隔的同时进行正负号调整 | justify_interval(interval '1 mon -1 hour') | 29 days 23:00:00 |
| time | 当日时间;见节9.9.4 | ||
| timestamp | 当前事务开始时的时间戳;见节9.9.4 | ||
| timestamp with time zone | 当前事务开始时的时间戳;见节9.9.4 | ||
| timestamp with time zone | 实时时钟的当前时间戳;见节9.9.4 | ||
| text | 与 clock_timestamp 相同,但结果是一个 text 字符串;见节9.9.4 | ||
| timestamp with time zone | 当前事务开始时的时间戳;见节9.9.4 |
除了这些函数以外,还支持 SQL 的 OVERLAPS
操作符:
(start1
,end1
) OVERLAPS (start2
,end2
) (start1
,length1
) OVERLAPS (start2
,length2
)
这个表达式在两个时间域(用它们的终点定义)重叠的时候生成真值。终点可以用一对日期、时间、时间戳来声明;或者是一个后面跟着一个时间间隔的日期、时间、时间戳。
SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS (DATE '2001-10-30', DATE '2002-10-30'); Result: true SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS (DATE '2001-10-30', DATE '2002-10-30'); Result: false
当把 interval
值添加到 timestamp with time zone
上(或从中减去)的时候,days 部分会按照指定的天数增加(或减少) timestamp with time zone
的日期。对于横跨夏令时的变化(会话的时区设置被识别为夏时制),interval '1 day'
并不一定等于 interval '24 hours'
。例如,当会话的时区设置为 CST7CDT
的时候,timestamp with time zone '2005-04-02 12:00-07' + interval '1 day'
的结果是 timestamp with time zone '2005-04-03 12:00-06'
,而将 interval '24 hours'
增加到相同的 timestamp with time zone
之上的结果则是 timestamp with time zone '2005-04-03 13:00-06'
,因为 CST7CDT
时区在 2005-04-03 02:00
的时候有一个夏令时变更。
9.9.1. EXTRACT
, date_part
EXTRACT(field
FROMsource
)
extract
函数从日期/时间数值里抽取子域,比如年、小时等。source
必须是一个 timestamp
, time
, interval
类型的值表达式(类型为 date
的表达式将转换为 timestamp
,因此也可以用)。field
是一个标识符或者字符串,它指定从源数据中抽取的域。extract
函数返回类型为 double precision
的数值。下列数值是有效数据域的名字:
century
世纪
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); Result: 20 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 21
第一个世纪从 0001-01-01 00:00:00 AD 开始,尽管那时候人们还不知道这是第一个世纪。这个定义适用于所有使用阳历的国家。没有 0 世纪,我们直接从公元前 1 世纪到公元 1 世纪。如果你认为这个不合理,那么请把抱怨发给:梵蒂冈,罗马圣彼得教堂,教皇收。
PostgreSQL 8.0 以前版本里并不遵循世纪的习惯编号,只是把年份除以 100 。
day
(月份)里的日期(1-31)
SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 16
decade
年份除以 10
SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 200
dow
每周的星期号(0-6 ;星期天是 0)(仅用于
timestamp
值)SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 5
请注意,
extract
的星期几编号和to_char
函数不同。doy
一年的第几天(1-365/366)(仅用于
timestamp
值)SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 47
epoch
对于
date
和timestamp
值而言,是自 1970-01-01 00:00:00-00 以来的秒数(结果可能是负数);对于interval
值而言,它是时间间隔的总秒数。SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08'); Result: 982384720 SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); Result: 442800
下面是把 epoch 值转换回时间戳的方法:
SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720 * INTERVAL '1 second';
hour
小时域(0-23)
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 20
microseconds
秒域(包括小数部分)乘以 1,000,000 。请注意它包括全部的秒。
SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); Result: 28500000
millennium
千年
SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 3
20 世纪(19xx 年)里面的年份在第二个千年里。第三个千年从 2001 年 1 月 1 日零时开始。
PostgreSQL 8.0 之前的版本并不遵循前年编号的习惯,只是返回年份除以 1000 。
milliseconds
秒域(包括小数部分)乘以 1000 。请注意它包括完整的秒。
SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); Result: 28500
minute
分钟域(0-59)
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 38
month
对于
timestamp
值,它是一年里的月份数(1-12);对于interval
值,它是月的数目,然后对 12 取模(0-11)SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 2 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months'); Result: 3 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); Result: 1
quarter
该天所在的该年的季度(1-4)(仅用于
timestamp
值)SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 1
second
秒域,包括小数部分(0-59)[1]
SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 40 SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); Result: 28.5
timezone
与 UTC 的时区偏移量,以秒记。正数对应 UTC 东边的时区,负数对应 UTC 西边的时区。
timezone_hour
时区偏移量的小时部分。
timezone_minute
时区偏移量的分钟部分。
week
该天在所在的年份里是第几周。ISO-8601 定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。(只用于
timestamp
值)因此,一月的头几天可能是前一年的第 52 或者第 53 周。比如,
2005-01-01
是 2004 年的第 53 周,而2006-01-01
是 2005 年的第 52 周。SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 7
year
年份域。要记住这里没有
0 AD
,所以从AD
年里抽取BC
年应该小心些。SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 2001
extract
函数主要的用途是运算。对于用于显示的日期/时间数值格式化,参阅节9.8。
date_part
函数是在传统的 Ingres 函数的基础上制作的(该函数等效于 SQL 标准函数 extract
):
date_part('field
',source
)
请注意这里的 field
参数必须是一个字符串值,而不是一个名字。有效的 date_part
数域名和 extract
是一样的。
SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); Result: 16 SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); Result: 4
9.9.2. date_trunc
date_trunc
函数在概念上和用于数字的 trunc
函数类似。
date_trunc('field
',source
)
source
是 timestamp
或 interval
类型的值表达式(date
和 time
类型的值都分别自动转换成 timestamp
或 interval
)。用 field
选择对该时间戳值用什么样的精度进行截断。返回的数值是 timestamp
或 interval
类型,所有小于选定的精度的域都设置为零(日期和月份域则为 1)。
field
的有效数值是:
microseconds |
milliseconds |
second |
minute |
hour |
day |
week |
month |
quarter |
year |
decade |
century |
millennium |
例子:
SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); Result: 2001-02-16 20:00:00 SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); Result: 2001-01-01 00:00:00
9.9.3. AT TIME ZONE
AT TIME ZONE
构造允许把时间戳转换成不同的时区。表9-27显示了其变体。
表9-27. AT TIME ZONE
变体
表达式 | 返回类型 | 描述 |
---|---|---|
| timestamp with time zone | 把给出的不带时区的时间戳转换成给定时区的时间戳 |
| timestamp without time zone | 把给出的带时区的时间戳转换成给定时区的时间戳 |
| time with time zone | 把给出的带时区的时间转换成给定时区的时间 |
在这些表达式里,zone
可以声明为文本串(比如 'PST'
)或者一个时间间隔(比如 INTERVAL '-08:00'
)。在文本的情况下,可用的时区名字在节8.5.3有详细描述。
例子(假设本地时区是 PST8PDT
):
SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST'; Result: 2001-02-16 19:38:40-08 SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST'; Result: 2001-02-16 18:38:40
第一个例子接受一个无时区的时间戳然后把它解释成 MST(UTC-7) 时间生成 UTC 时间戳,然后把这个时间转换为 PST(UTC-8) 显示。第二个例子接受一个声明为 EST(UTC-5) 的时间戳,然后把它转换成 MST(UTC-7) 的当地时间。
函数等效于 SQL 兼容的构造 timezone
(zone
, timestamp
)timestamp
AT TIME ZONE zone
9.9.4. 当前日期/时间
PostgreSQL 提供许多返回当前日期和时间的函数。这些符合 SQL 标准的函数全部都按照当前事务的开始时刻返回结果:
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME(precision
) CURRENT_TIMESTAMP(precision
) LOCALTIME LOCALTIMESTAMP LOCALTIME(precision
) LOCALTIMESTAMP(precision
)
CURRENT_TIME
和 CURRENT_TIMESTAMP
返回带有时区的值;LOCALTIME
和 LOCALTIMESTAMP
返回不带时区的值。
CURRENT_TIME
, CURRENT_TIMESTAMP
, LOCALTIME
, LOCALTIMESTAMP
可以有选择地给予一个精度参数,该精度导致结果的秒数域园整到指定小数位。如果没有精度参数,将给予所能得到的全部精度。
一些例子:
SELECT CURRENT_TIME; Result: 14:39:53.662522-05 SELECT CURRENT_DATE; Result: 2001-12-23 SELECT CURRENT_TIMESTAMP; Result: 2001-12-23 14:39:53.662522-05 SELECT CURRENT_TIMESTAMP(2); Result: 2001-12-23 14:39:53.66-05 SELECT LOCALTIMESTAMP; Result: 2001-12-23 14:39:53.662522
因为这些函数全部都按照当前事务的开始时刻返回结果,所以它们的值在事务运行的整个期间内都不改变。我们认为这是一个特性:目的是为了允许一个事务在"当前时间"上有连贯的概念,这样在同一个事务里的多个修改可以保持同样的时间戳。
【注意】许多其它数据库系统更频繁地更新这些数值。
PostgreSQL 同样也提供了返回实时时间值的函数,它们的返回值会在事务中随时间的前进而变化。这些不附合 SQL 标准的函数列表如下:
now() transaction_timestamp() statement_timestamp() clock_timestamp() timeofday()
now()
是传统的 PostgreSQL 和 CURRENT_TIMESTAMP
等效的函数。transaction_timestamp()
等效于 CURRENT_TIMESTAMP
,不过其命名准确的表明了其含义。statement_timestamp()
返回当前事务开始时刻的时间戳(更准确的说是收到客户端最后一条命令的时间)。statement_timestamp()
和 transaction_timestamp()
在一个事务的第一条命令里返回值相同,但是在随后的命令中却不一定相同。clock_timestamp()
返回实时时钟的当前时间戳,因此它的值甚至在同一条 SQL 命令中都会变化。timeofday()
相当于 clock_timestamp()
,也返回实时时钟的当前时间戳,由于历史原因,它返回一个 text
字符串,而不是 timestamp with time zone
值。
所有日期/时间类型还接受特殊的文本值 now
,用于声明当前的日期和时间(重申:当前事务的开始时刻)。因此,下面三个都返回相同的结果:
SELECT CURRENT_TIMESTAMP; SELECT now(); SELECT TIMESTAMP 'now'; -- incorrect for use with DEFAULT
【提示】在创建表的时候你不应该用第三种形式声明一个
DEFAULT
值。系统将在分析这个常量的时候把now
转换为一个timestamp
,因此这个缺省值就会变成创建表的时间!而前两种形式要到实际使用缺省值的时候才计算,因为它们是函数调用。因此它们可以给出每次插入行的时刻。
9.9.5. 延时执行
下面的这个函数可以用于让服务器进程延时执行:
pg_sleep(seconds
)
pg_sleep
让当前的会话进程休眠 seconds
秒以后再执行。seconds
是一个 double precision
类型的值,所以可以指定带小数的秒数。例如:
SELECT pg_sleep(1.5);
【注意】有效的休眠时间间隔精度是平台相关的,通常 0.01 秒是通用的。休眠的时间将至少等于指定的时间,也有可能由于服务器荷载较重等原因而比指定的时间长。
警告 |
请确保调用 |
注意
[1] | 如果操作系统实现了润秒,那么上限是 60 。 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论