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 '
是 `SET search_path TO value
'value
` 的別名。使用此語法只能指定一個模式。
NAMES
SET NAMES '
是 `SET client_encoding TO value
'value
` 的別名。
SEED
設定隨機數生成器(函式 `random`)的內部種子。允許的值是介於 -1 和 1 之間的浮點數。
透過呼叫函式 `setseed` 也可以設定種子。
SELECT setseed(value
);
TIME ZONE
SET TIME ZONE '
是 `SET timezone TO 'value
'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 節。此外,還可以透過更新 pg_settings
系統檢視來執行 `SET` 的等效操作。
設定模式搜尋路徑
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 的擴充套件。
如果您在文件中發現任何不正確、與您對特定功能的使用體驗不符或需要進一步澄清的內容,請使用 此表格 來報告文件問題。