↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.

SET

SET — 设置运行时参数

大纲

SET variable { TO | = } { value | 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
  

输入

variable

一个可设置的运行时参数。

value

参数的新值。DEFAULT 可用于指定把参数重置为默认值。允许使用字符串列表,但更复杂的构造可能需要加单引号或双引号。

描述

SET 命令更改运行时配置参数。下列参数可以更改:

CLIENT_ENCODING
NAMES

设置多字节客户端编码。指定的编码必须为后端所支持。

这个选项只有在 Postgres 以多字节支持构建时才可用。

DATESTYLE

选择日期/时间的表示风格。这里进行两个独立的设置:默认的日期/时间输出和对有歧义输入的解释。

以下是日期/时间的输出风格:

ISO

使用 ISO 8601 风格的日期和时间(YYYY-MM-DD HH:MM:SS)。这是默认值。

SQL

使用 Oracle/Ingres 风格的日期和时间。注意这种风格与 SQL(它强制使用 ISO 8601 风格)毫无关系,这个选项的命名是一个历史意外。

Postgres

使用传统的 Postgres 格式。

German

数值日期表示使用 dd.mm.yyyy。

下面两个选项既决定 “SQL” 和 “Postgres” 输出格式的子风格,也决定有歧义日期输入的首选解释。

European

数值日期表示使用 dd/mm/yyyy。

NonEuropean
US

数值日期表示使用 mm/dd/yyyy。

SET DATESTYLE 的值可以取自第一个列表(输出风格),或第二个列表(子风格),或从两个列表中各取一个并用逗号分隔。

日期格式的初始化可以通过以下方式完成:

设置 PGDATESTYLE 环境变量。如果在基于 libpq 的客户端前端环境中设置了 PGDATESTYLE,libpq 会在连接启动时自动把 DATESTYLE 设为 PGDATESTYLE 的值。
使用选项 -o -e 运行 postmaster,把日期设为 European 约定。

DateStyle 选项其实只是为了移植应用而设的。要按你的选择格式化日期/时间值,请使用 to_char 函数族。

SEED

设置随机数生成器的内部种子。

value

供 random 函数使用的种子的值。允许的值是 0 到 1 之间的浮点数,它们随后会与 2^31-1 相乘。如果使用范围之外的数,该乘积会静默溢出。

种子也可以通过调用 setseed SQL 函数来设置:

SELECT setseed(value);
	    

SERVER_ENCODING

设置多字节服务器编码。

这个选项只有在 Postgres 以多字节支持构建时才可用。

TIME ZONE
TIME ZONE

时区的可用值取决于你的操作系统。例如在 Linux 上,/usr/share/zoneinfo 包含时区数据库。

下面是一些有效的时区值:

PST8PDT

把时区设为加利福尼亚州。

Portugal

把时区设为葡萄牙。

'Europe/Rome'

把时区设为意大利。

LOCAL
DEFAULT

把时区设为你的本地时区(你的操作系统默认的时区)。

如果指定了无效的时区,时区会变成 GMT(至少在大多数系统上如此)。

如果在基于 libpq 的客户端前端环境中设置了 PGTZ 环境变量,libpq 会在连接启动时自动把 TIMEZONE 设为 PGTZ 的值。

其他运行时参数的完整列表见管理员指南。

使用SHOW显示参数的当前设置。

诊断

SET VARIABLE

成功时返回的消息。

ERROR: not a valid option name: name

你试图设置的参数不存在。

ERROR: permission denied

你必须是超级用户才能访问某些设置。

ERROR: name can only be set at start-up

有些参数在服务器启动后就是固定的。

示例

把日期样式设为带欧洲习惯的传统 Postgres 形式:

SET DATESTYLE TO Postgres,European;

把时区设为加州伯克利,使用双引号保留时区说明符的大写属性(注意这里日期/时间格式是 ISO):

 
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 TIME ZONE)试图模仿 SQL92。但 SQL 只允许数值形式的时区偏移。所有其他参数设置以及上面所示的第一种语法都是 Postgres 扩展。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.