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