PostgreSQL SET

2021-09-13 14:56 更新

SET — 更改一個運行時參數(shù)

大綱

SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }

描述

SET命令更改運行時配置參數(shù)。很多 第 19 章中列出的參數(shù)可以用 SET即時更改(但是有些需要超級用戶 特權(quán)才能更改,并且還有一些在服務(wù)器或者會話啟動之后不能被更改)。 SET只影響當前會話所使用的值。

如果在一個事務(wù)內(nèi)發(fā)出SET (或者等效的SET SESSION)而該事務(wù)后來 中止,在該事務(wù)被回滾時SET命令的效果會 消失。一旦所在的事務(wù)被提交,這些效果將會持續(xù)到會話結(jié)束(除非被另 一個SET所覆蓋)。

SET LOCAL的效果只持續(xù)到當前事務(wù)結(jié)束, 不管事務(wù)是否被提交。一種特殊情況是在一個事務(wù)內(nèi) SET后面跟著 SET LOCALSET LOCAL值將會在該事務(wù)結(jié)束前一直可見, 但是之后(如果該事務(wù)被提交)SET值將會生效。

SETSET LOCAL 的效果也會因為回滾到早于它們的保存點而消失。

如果在一個函數(shù)內(nèi)使用SET LOCAL并且該函數(shù) 還有對同一變量的SET選項(見 CREATE FUNCTION),在函數(shù)退出時 SET LOCAL命令的效果會消失。也就是說,該 函數(shù)被調(diào)用時的值會被恢復。這允許用 SET LOCAL在函數(shù)內(nèi)動態(tài)地或者重復地更改 一個參數(shù),同時仍然能便利地使用SET選項來保存以及恢復調(diào)用 者的值。不過,一個常規(guī)的SET命令會覆蓋它所在的任何函 數(shù)的SET選項,除非回滾,它的效果將一直保持。

注意

PostgreSQL 版本 8.0 到 8.2 中, 一個SET LOCAL的效果會因為釋放較早的 保存點或者成功地從一個PL/pgSQL異常塊 中退出而被取消。這種行為已經(jīng)被更改,因為它被認為不直觀。

參數(shù)

SESSION

指定該命令對當前會話有效(這是默認值)。

LOCAL

指定該命令只對當前事務(wù)有效。在COMMIT或者 ROLLBACK之后,會話級別的設(shè)置會再次生效。 在事務(wù)塊外部發(fā)出這個參數(shù)會發(fā)出一個警告并且不會有效果。

configuration_parameter

一個可設(shè)置運行時參數(shù)的名稱??捎玫膮?shù)被記錄在 第 19 章和下文中。

value

參數(shù)的新值。根據(jù)特定的參數(shù),值可以被指定為字符串常量、標識符、 數(shù)字或者以上構(gòu)成的逗號分隔列表。寫DEFAULT 可以指定把該參數(shù)重置成它的默認值(也就是說在當前會話中還沒有 執(zhí)行SET命令時它具有的值)。

除了在第 19 章中記錄的配置參數(shù), 還有一些參數(shù)只能用SET命令設(shè)置 或者具有特殊的語法:

SCHEMA

SET SCHEMA 'value 'SET search_path TO value 的一個別名。 使用這種語法只能指定一個模式。

NAMES

SET NAMES value SET client_encoding TO value 的一個別名。

SEED

為隨機數(shù)生成器(函數(shù)random)設(shè)置 一個內(nèi)部種子。允許的值是 -1 和 1 之間的浮點數(shù),它會被乘上 231-1。

也可以通過調(diào)用函數(shù)setseed來設(shè)置種子:

SELECT setseed(value);
TIME ZONE

SET TIME ZONE value SET timezone TO value 的一個別 名。語法SET TIME ZONE允許用于時區(qū)指定的特 殊語法。這里是合法值的例子:

'PST8PDT'

加州伯克利的時區(qū)。

'Europe/Rome'

意大利的時區(qū)。

-7

UTC 以西 7 小時的時區(qū)(等效于 PDT)。正值則是 UTC 以東。

INTERVAL '-08:00' HOUR TO MINUTE

UTC 以西 8 小時的時區(qū)(等效于 PST)。

LOCAL
DEFAULT

把時區(qū)設(shè)置為你的本地時區(qū)(也就是說服務(wù)器的timezone默認值)。

以數(shù)字或區(qū)間給出的時區(qū)設(shè)置在內(nèi)部被翻譯成 POSIX 時區(qū)語法。 例如,在SET TIME ZONE -7之后, SHOW TIME ZONE將會報告 <-07>+07。

有關(guān)時區(qū)的更多信息可見第 8.5.3 節(jié)

注解

函數(shù)set_config提供了等效的功能,見 第 9.27 節(jié)。此外,可以更新 pg_settings 系統(tǒng)視圖來執(zhí)行與 SET等效的工作。

示例

設(shè)置模式搜索路徑:

SET search_path TO my_schema, public;

把日期風格設(shè)置為傳統(tǒng) POSTGRES日在月之前的輸入習慣:

SET datestyle TO postgres, dmy;

設(shè)置時區(qū)為加州伯克利:

SET TIME ZONE 'PST8PDT';

設(shè)置時區(qū)為意大利:

SET TIME ZONE 'Europe/Rome';

兼容性

SET TIME ZONE擴展了 SQL 標準定義的語法。標準 只允許數(shù)字的時區(qū)偏移量而 PostgreSQL允許更靈活的時區(qū)說明。 所有其他SET特性都是 PostgreSQL擴展。

另見

RESET , SHOW


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號