pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
SET — 设置会话的运行时参数
SETvariable{ TO | = } { 'value' | DEFAULT } SET TIME ZONE { 'timezone' | LOCAL | DEFAULT } SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZED }
variable可设置的全局参数。
value参数的新值。
可能的变量和允许的值有:
设置多字节客户端编码。参数有:
value把多字节客户端编码设为 value。 指定的编码必须为后端所支持。
把多字节客户端编码设为默认值。
只有在向 configure 指定了 multi-byte 时才会启用。
设置日期/时间的表示风格。影响输出格式, 某些情况下也会影响输入的解释。
使用 ISO 8601 风格的日期和时间
使用 Oracle/Ingres 风格的日期和时间
使用传统的 Postgres 格式
数值日期表示使用 dd/mm/yyyy。
数值日期表示使用 mm/dd/yyyy。
数值日期表示使用 dd.mm.yyyy。
与 'NonEuropean' 相同
恢复默认值('US,Postgres')
日期格式的初始化可以通过以下方式完成:
设置 PGDATESTYLE 环境变量。 |
使用 -o -e 选项运行 postmaster,把日期设为 European 约定。 注意这只影响日期风格的一些组合;例如 ISO 风格不受这个参数影响。 |
更改 src/backend/utils/init/globals.c 中的变量。 |
globals.c 中可以更改的变量有:
| bool EuroDates = false | true |
| int DateStyle = USE_ISO_DATES | USE_POSTGRES_DATES | USE_SQL_DATES | USE_GERMAN_DATES |
设置多字节服务器编码
value设置多字节服务器编码。
设置多字节服务器编码。
只有在向 configure 指定了 multi-byte 时才会启用。
timezone 的可用值取决于你的操作系统。例如在 Linux 上, /usr/lib/zoneinfo 包含时区数据库。
下面是一些有效的 timezone 值:
把时区设为加利福尼亚州
把时区设为葡萄牙。
把时区设为意大利。
把时区设为你的本地时区 (TZ 环境变量的值)。
如果指定了无效的时区,时区 会变成 GMT(至少在大多数系统上如此)。
使用 libpq 的前端可以通过设置 PGTZ 环境变量来初始化。
上面所示的第二种语法允许用与 SQL92 SET TIME ZONE 类似的语法 设置时区。LOCAL 关键字只是为兼容 SQL92 而提供的 DEFAULT 的另一种形式。
设置当前事务的隔离级别。
当前事务的查询只读取 在查询开始之前已提交的行。READ COMMITTED 是默认值。
SQL92 标准要求 SERIALIZABLE 为默认的隔离级别。
当前事务的查询只读取在本事务中 第一条 DML 语句 (SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) 执行之前已提交的行。
还有一些内部参数或优化参数也可以由 SET 命令指定:
设置优化器使用的堆扫描默认代价。
float4把堆扫描的代价设为指定的浮点值。
把堆扫描的代价设为默认值。
前端可以通过设置 PGCOSTHEAP 环境变量来初始化。
设置优化器使用的索引扫描默认代价。
float4把索引扫描的代价设为指定的浮点值。
把索引扫描的代价设为默认值。
前端可以通过设置 PGCOSTINDEX 环境变量来初始化。
设置使用遗传优化器算法的阈值。
对涉及 6 个或更多表的语句 启用遗传优化器算法。
#接受一个整数参数,对查询中涉及 # 个或更多表的语句启用遗传优化器算法。
禁用遗传优化器算法。
等价于指定 SET GEQO='ON'
这个算法默认开启,即对涉及 十一个或更多表的语句使用 GEQO。 (更多信息见程序员指南中的 GEQO 一章。)
前端可以通过设置 PGGEQO 环境变量来初始化。
在大关系与小关系连接时可能有用。 这个算法默认关闭。 GEQO 也不会使用它。
键集查询优化器强制查询优化器 优化诸如 MicroSoft Access 生成的重复 OR 子句:
启用这种优化。
禁用这种优化。
等价于指定 SET KSQO='OFF'。
在大关系与小关系连接时可能有用。 这个算法默认关闭。 GEQO 也不会使用它。
前端可以通过设置 PGKSQO 环境变量来初始化。
SET VARIABLE成功时返回的消息。
WARN: Bad value for variable (value)如果命令未能设置指定的变量。
SET 会在会话期间修改变量的配置参数。
当前值可以用 SHOW 获得,值可以 用 RESET 恢复为默认值。 参数和值不区分大小写。注意值 字段总是以字符串形式指定,因此用 单引号括起。
SET TIME ZONE 更改会话的 默认时区偏移。 SQL 会话总是以一个初始的默认时区 偏移开始。 SET TIME ZONE 语句用于更改当前 SQL 会话的默认 时区偏移。
SET 语句是一种 Postgres 语言扩展。variable
请参阅 SHOW 和 RESET 来 显示或重置当前值。
把日期样式设置为 ISO:
SET DATESTYLE TO 'ISO';
为有 4 个或更多表的查询启用 GEQO:
SET GEQO ON=4;
把 GEQO 设为默认值:
SET GEQO = DEFAULT;
把时区设为加州伯克利:
SET TIME ZONE 'PST8PDT'; SELECT CURRENT_TIMESTAMP AS today; today ---------------------- 1998-03-31 07:41:21-08
把时区设为意大利:
SET TIME ZONE 'Europe/Rome'; SELECT CURRENT_TIMESTAMP AS today; today ---------------------- 1998-03-31 17:41:31+02
SQL92 中没有通用的 SET (SET TRANSACTION ISOLATION LEVEL 除外)。 SQL92 中 variableSET TIME ZONE 的语法 略有不同, 只允许用单个整数值指定时区:
SET TIME ZONE { interval_value_expression | LOCAL }
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。