支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

SET

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 LOCALSET LOCAL 值將在事務結束前可見,但在之後(如果事務已提交)SET 值將生效。

SETSET LOCAL 的效果也會因回滾到早於指令的儲存點而取消。

如果在具有相同變數的 SET 選項的函數中使用 SET LOCAL(請參閱 CREATE FUNCTION),則 SET LOCAL 指令的效果會在函數退出時消失;也就是說,無論如何都會還原呼叫函數時生效的值。這允許將 SET LOCAL 用於函數內參數的動態或重複變更,同時仍然方便地使用 SET 選項來儲存和還原呼叫者的值。但是,常規的 SET 指令會覆蓋任何周圍函數的 SET 選項;其效果將持續存在,除非回滾。

注意

PostgreSQL 8.0 到 8.2 版本中,SET LOCAL 的效果會因釋放較早的儲存點,或因成功退出 PL/pgSQL 例外區塊而取消。此行為已更改,因為它被認為是不直觀的。

參數

SESSION

指定指令對目前工作階段生效。(如果未出現 SESSIONLOCAL,則這是預設值。)

LOCAL

指定指令僅對目前事務生效。在 COMMITROLLBACK 之後,工作階段層級設定再次生效。在事務區塊之外發出此指令會發出警告,否則無效。

configuration_parameter

可設定的執行階段參數的名稱。可用參數記錄在 第 19 章及其下方。

value

參數的新值。值可以指定為字串常數、識別碼、數字或這些值的逗號分隔清單,視特定參數而定。DEFAULT 可以寫入以指定將參數重設為其預設值(也就是說,如果在目前工作階段中未執行 SET,它將具有的值)。

除了 第 19 章中記錄的設定參數之外,還有一些只能使用 SET 指令調整,或者具有特殊語法

SCHEMA

SET SCHEMA 'value'SET search_path TO value 的別名。使用此語法只能指定一個綱要。

NAMES

SET NAMES valueSET 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 擴充功能。

另請參閱

RESET, SHOW

提交更正

如果您在文件中發現任何不正確的地方、與特定功能的使用經驗不符,或需要進一步說明,請使用此表單回報文件問題。