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