?
This document uses PHP Chinese website manual Release
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }
SET命令修改運行時配置參數。許多在Chapter 18里面列出的運行時參數可以用SET在運行時設置。 但是有些要求使用超級用戶權限來修改,而其它有些則在服務器或者會話開始之后不能修改。 請注意SET只影響當前會話使用的數值。
如果SET或SET SESSION是在一個稍后退出的事務里發(fā)出的, 那么SET命令的效果將在事務回滾之后消失。 一旦包圍它的事務提交,那么其效果將持續(xù)到事務的結束, 除非被另外一個SET覆蓋。
不管是否提交,SET LOCAL的效果只持續(xù)到當前事務結束。 一個特例是在一個事務里面的SET后面跟著一個SET LOCAL: 在事務結束之前只能看到SET LOCAL的數值,但是之后(如果事務提交), 則是SET的值生效。
SET或者SET LOCAL也通過回滾到一個遭遇 該命令的保存點被取消。
如果SET LOCAL在一個對相同變量有SET選項的函數內使用。 (請參閱CREATE FUNCTION),出現在函數中的SET LOCAL 命令的影響在函數退出時消失;也就是說,函數調用時起作用的值不論如何都要保存。 這允許SET LOCAL用來對函數內的一個參數進行動態(tài)和反復修改, 盡管仍然方便使用SET選項來保存和存儲調用程序的值。然而,規(guī)則的SET 命令重寫任何周圍函數的SET選項;其影響將會持續(xù),除非回滾。
Note: 在PostgreSQL8.0到8.2版本中,一個SET LOCAL的 影響將通過發(fā)布一個較早的保存點被取消,或者通過從一個PL/pgSQL當異 常塊成功退出。該選項一杯更改,因為它被認為是非直觀的。
聲明這個命令只對當前會話起作用。如果SESSION或LOCAL都沒出現, 那么這個是缺省。
聲明該命令只在當前事務中有效。在COMMIT或者ROLLBACK之后, 會話級別的設置將再次生效。請注意如果在BEGIN塊之外運行, 那么SET LOCAL將表現出沒有作用, 因為事務將立即結束。
可設置的運行時參數的名字??捎玫膮翟贑hapter 18和下面有文檔。
參數的新值。值可以聲明為字符串常量、標識符、數字,或者逗號分隔的上面這些東西的列表。 對于特定參數是恰當的。 DEFAULT可以用于把這些參數設置為它們的缺省值。 (也就是說,如果在當前會話中沒有SET執(zhí)行,無論是什么數值都會設置。)
除了在Chapter 18里面有文檔記載的配置參數之外, 還有幾個只能用SET命令設置,或者是有特殊的語法的參數。
SET SCHEMA 'value'是SET search_path TO value 的一個別名。用該語法僅可指定一個模式。
SET NAMES value是 SET client_encoding TO value的別名。
為隨機數生成器(函數random
)設置內部的種子。
允許的值是介于-1和1之間的浮點數,然后它會被乘以231-1
也可以通過調用setseed
函數來設置種子:
SELECT setseed(value);
SET TIME ZONE value是SET timezone TO value的一個別名。 語法SET TIME ZONE允許為時區(qū)設置特殊的語法。下面是有效值的例子:
加州伯克利的時區(qū)
意大利時區(qū)
UTC以西7小時的時區(qū)(等效于PDT) 。UTC以東的時正值。
UTC以西8小時的時區(qū)(等效于 PST)
將時區(qū)設置為您的本地時區(qū)(也即,服務器的timezone默認值; 如果這未在任何地方被顯式地設置,這將是服務器操作系統(tǒng)默認的時區(qū))。
參閱Section 8.5.3獲取有關時區(qū)的更多細節(jié)。
函數set_config
提供了等效的功能。參閱Section 9.24。
同時,可以UPDATE這個pg_settings
系統(tǒng)視圖來執(zhí)行SET的等價操作。
設置模式搜索路徑:
SET search_path TO my_schema, public;
把日期時間風格設置為傳統(tǒng)的POSTGRES風格("日在月前"):
SET datestyle TO postgres, dmy;
把時區(qū)設置為加州伯克利:
SET TIME ZONE 'PST8PDT';
為意大利設置時區(qū):
SET TIME ZONE 'Europe/Rome';
SET TIME ZONE擴展了在SQL標準里定義的語法。 標準只允許有一個數字時區(qū)偏移,而PostgreSQL還允許完整更靈活的時區(qū)聲明。 所有其它的SET特性都是PostgreSQL擴展。