SET — 變更執行階段參數
SET [ SESSION | LOCAL ]configuration_parameter
{ TO | = } {value
| 'value
' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {value
| 'value
' | LOCAL | DEFAULT }
SET
指令會變更執行階段設定參數。在 第 19 章中列出的許多執行階段參數都可以使用 SET
即時變更。(某些參數只能由超級使用者和已獲得該參數的 SET
權限的使用者變更。還有一些參數在伺服器或工作階段啟動後無法變更。)SET
只會影響目前工作階段使用的值。
如果在稍後中止的事務中發出 SET
(或等效的 SET SESSION
),則當事務回滾時,SET
指令的效果會消失。一旦提交周圍的事務,效果將持續到工作階段結束,除非被另一個 SET
覆蓋。
SET LOCAL
的效果只會持續到目前事務結束,無論是否提交。特殊情況是單個事務中的 SET
後面接著 SET LOCAL
:SET LOCAL
值將在事務結束前可見,但在之後(如果事務已提交)SET
值將生效。
SET
或 SET LOCAL
的效果也會因回滾到早於指令的儲存點而取消。
如果在具有相同變數的 SET
選項的函數中使用 SET LOCAL
(請參閱 CREATE FUNCTION),則 SET LOCAL
指令的效果會在函數退出時消失;也就是說,無論如何都會還原呼叫函數時生效的值。這允許將 SET LOCAL
用於函數內參數的動態或重複變更,同時仍然方便地使用 SET
選項來儲存和還原呼叫者的值。但是,常規的 SET
指令會覆蓋任何周圍函數的 SET
選項;其效果將持續存在,除非回滾。
在 PostgreSQL 8.0 到 8.2 版本中,SET LOCAL
的效果會因釋放較早的儲存點,或因成功退出 PL/pgSQL 例外區塊而取消。此行為已更改,因為它被認為是不直觀的。
SESSION
指定指令對目前工作階段生效。(如果未出現 SESSION
或 LOCAL
,則這是預設值。)
LOCAL
指定指令僅對目前事務生效。在 COMMIT
或 ROLLBACK
之後,工作階段層級設定再次生效。在事務區塊之外發出此指令會發出警告,否則無效。
configuration_parameter
可設定的執行階段參數的名稱。可用參數記錄在 第 19 章及其下方。
value
參數的新值。值可以指定為字串常數、識別碼、數字或這些值的逗號分隔清單,視特定參數而定。DEFAULT
可以寫入以指定將參數重設為其預設值(也就是說,如果在目前工作階段中未執行 SET
,它將具有的值)。
除了 第 19 章中記錄的設定參數之外,還有一些只能使用 SET
指令調整,或者具有特殊語法
SCHEMA
SET SCHEMA '
是 value
'SET search_path TO
的別名。使用此語法只能指定一個綱要。value
NAMES
SET NAMES
是 value
SET client_encoding TO
的別名。value
SEED
設定亂數產生器(函數 random
)的內部種子。允許的值是介於 -1 和 1 之間的浮點數(含)。
種子也可以透過呼叫函數 setseed
來設定
SELECT setseed(value
);
TIME ZONE
SET TIME ZONE '
是 value
'SET timezone TO '
的別名。value
'SET TIME ZONE
語法允許時區規格的特殊語法。以下是有效值的範例
'America/Los_Angeles'
加州柏克萊的時區。
'Europe/Rome'
義大利的時區。
-7
與 UTC 以西 7 小時的時區(相當於 PDT)。正值表示位於 UTC 以東。
INTERVAL '-08:00' HOUR TO MINUTE
與 UTC 以西 8 小時的時區(相當於 PST)。
LOCAL
DEFAULT
將時區設定為您的當地時區(也就是伺服器的預設值 timezone
)。
以數字或區間表示的時區設定,在內部會轉換為 POSIX 時區語法。例如,在執行 SET TIME ZONE -7
之後,SHOW TIME ZONE
會回報 <-07>+07
。
SET
不支援時區縮寫;關於時區的更多資訊,請參閱第 8.5.3 節。
函數 set_config
提供同等功能;請參閱第 9.28.1 節。 此外,也可以 UPDATE pg_settings
系統檢視表,以執行與 SET
同等的操作。
設定 schema 搜尋路徑
SET search_path TO my_schema, public;
設定日期樣式為傳統 POSTGRES,並採用 “日位於月之前” 的輸入慣例
SET datestyle TO postgres, dmy;
設定加州柏克萊的時區
SET TIME ZONE 'America/Los_Angeles';
設定義大利的時區
SET TIME ZONE 'Europe/Rome';
SET TIME ZONE
擴展了 SQL 標準中定義的語法。 標準僅允許數值時區偏移,而 PostgreSQL 允許更彈性的時區規範。 所有其他的 SET
功能都是 PostgreSQL 擴充功能。
如果您在文件中發現任何不正確的地方、與特定功能的使用經驗不符,或需要進一步說明,請使用此表單回報文件問題。