<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 9.26\. 系統管理函數 這節描述的函數用來控制和監視PostgreSQL安裝。 ## 9.26.1\. 配置設置函數 [Table 9-58](#calibre_link-2336)顯示了用于查詢和修改運行時配置參數的函數。 **Table 9-58\. 配置設置函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``current_setting(```setting_name`) | `text` | 獲取當前的設置值 | | ``set_config(```setting_name`, `new_value`, `is_local`) | `text` | 設置參數并返回新值 | `current_setting`用于以查詢形式獲取`setting_name` 設置的當前值。它和SQL命令`SHOW`是等效的。比如: ``` SELECT current_setting('datestyle'); current_setting ----------------- ISO, MDY (1 row) ``` `set_config`將參數`setting_name` 設置為`new_value`。如果`is_local` 為`true`,那么新值將只應用于當前事務。 如果你希望新值應用于當前會話,那么應該使用`false`。 它等效于 SQL 命令`SET`。比如: ``` SELECT set_config('log_statement_stats', 'off', false); set_config ------------ off (1 row) ``` ## 9.26.2\. 服務器信號函數 [Table 9-59](#calibre_link-1377)里的函數向其他服務器進程發送控制信號。 通常這些函數的使用限制為超級用戶,除了提到的例外。 **Table 9-59\. 服務器信號函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_cancel_backend(```pid` `int`) | `boolean` | 取消一個后端的當前查詢。您可以對另一個后端執行這個函數, 這個后端有和調用這個函數的用戶相同的角色。在所有其他情況下,您必須是超級用戶。 | | ``pg_reload_conf()`` | `boolean` | 導致所有服務器進程重新裝載它們的配置文件 | | ``pg_rotate_logfile()`` | `boolean` | 滾動服務器的日志文件 | | ``pg_terminate_backend(```pid` `int`) | `boolean` | 終止一個后端。您可以對另一個后端執行這個函數, 這個后端有和調用這個函數的用戶相同的角色。在所有其他情況下,您必須是超級用戶。 | 如果成功,這些函數返回`true`,否則返回`false`。 `pg_cancel_backend`和`pg_terminate_backend` 向由 pid 標識的后端進程發送一個信號(分別是SIGINT或SIGTERM)。 一個活動的后端進程的 PID 可以從`pg_stat_activity`視圖的 `pid`字段找到,或者在服務器上列出`postgres`進程 (在Unix上使用ps或在Windows上使用Task Manager)。 一個活動的后端角色可以從`pg_stat_activity`視圖的 `usename`字段找到。 `pg_reload_conf`給服務器發送一個SIGHUP信號, 導致所有服務器進程重新裝載配置文件。 `pg_rotate_logfile`給日志文件管理器發送信號,告訴它立即切換到一個新的輸出文件。 這個函數只有在內建的日志收集器運行的時候才有用,否則根本不存在日志文件管理器子進程。 ## 9.26.3\. 備份控制函數 [Table 9-60](#calibre_link-1642)里的函數幫助我們進行在線備份。 這些函數不能在恢復時執行(除了`pg_is_in_backup`, `pg_backup_start_time`和`pg_xlog_location_diff`) **Table 9-60\. 備份控制函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_create_restore_point(```name` `text`) | `text` | 為執行恢復創建一個命名點 (限制為超級用戶) | | ``pg_current_xlog_insert_location()`` | `text` | 獲取當前事務日志的插入位置 | | ``pg_current_xlog_location()`` | `text` | 獲取當前事務日志的寫入位置 | | ``pg_start_backup(```label` `text` [, `fast` `boolean` ]) | `text` | 準備執行在線備份(限制為超級用戶或復制的角色) | | ``pg_stop_backup()`` | `text` | 完成執行在線備份 (限制為超級用戶或復制的角色) | | ``pg_is_in_backup()`` | `bool` | 如果在線專屬備份仍在進行中則為真。 | | ``pg_backup_start_time()`` | `timestamp with time zone` | 獲取進行中的在線專屬備份的開始時間。 | | ``pg_switch_xlog()`` | `text` | 強制轉向一個新的事務日志文件(限制為超級用戶) | | ``pg_xlogfile_name(```location` `text`) | `text` | 將事務日志的位置字符串轉換為文件名 | | ``pg_xlogfile_name_offset(```location` `text`) | `text`, `integer` | 將事務日志的位置字符串轉換為文件名并返回在文件中的字節偏移量 | | ``pg_xlog_location_diff(```location` `text`, `location` `text`) | `numeric` | 計算兩個事務日志位置之間的區別 | `pg_start_backup`接受一個用戶定義的備份標簽(通常這是備份轉儲文件存放地點的名字)。 這個函數向數據庫集群的數據目錄寫入一個備份標簽文件(`backup_label`),執行一次檢查點, 然后以文本方式返回備份的事務日志起始位置。用戶可以忽略這個返回值,提供它只是為了萬一需要的場合。 ``` postgres=# select pg_start_backup('label_goes_here'); pg_start_backup ----------------- 0/D4445B8 (1 row) ``` 這個函數有第二個可選的類型為`boolean`的參數。如果為`true`, 那么指定盡可能快的執行`pg_start_backup`。這強制一個立即的檢查點, 將導致I/O操作有一個尖峰,減緩任何當前執行的查詢。 `pg_stop_backup`刪除`pg_start_backup`創建的標簽文件, 并且在事務日志歸檔區里創建一個備份歷史文件。這個歷史文件包含給予`pg_start_backup` 的標簽、備份的事務日志起始與終止位置、備份的起始和終止時間。 返回值是備份的事務日志終止位置(同樣也可以忽略)。計算出終止位置后, 當前事務日志的插入點將自動前進到下一個事務日志文件,這樣, 結束的事務日志文件可以被立即歸檔從而完成備份。 `pg_switch_xlog`移動到下一個事務日志文件,以允許將當前日志文件歸檔 (假定你使用連續歸檔)。返回值是剛剛完成的事務日志文件的事務日志結束位置 + 1。 如果自從最后一次事務日志切換以來沒有活動的事務日志,那么`pg_switch_xlog` 什么事也不做,直接返回當前使用的事務日志文件的開始位置。 `pg_create_restore_point`創建一個可以用作恢復目標的命名的事務日志記錄, 并返回相應的事務日志位置。給定的名字可以被[recovery_target_name](#calibre_link-1691) 使用以指定恢復將進行到的點。避免使用相同的名字創建多個恢復點, 因為恢復將在第一個名字匹配恢復目標的位置停止。 `pg_current_xlog_location`使用與前面那些函數相同的格式顯示當前事務日志的寫入位置。 類似的,`pg_current_xlog_insert_location`顯示當前事務日志的插入位置。 插入點是事務日志在某個瞬間的"邏輯終點", 而實際的寫入位置則是從服務器內部緩沖區寫出時的終點。寫入位置是可以從服務器外部檢測到的終點, 如果想歸檔部分完成的事務日志文件,那么這個通常就是你想要的結果。插入點主要用于服務器調試目的。 上述兩個函數既是只讀操作也不需要超級用戶權限。 可以使用`pg_xlogfile_name_offset` 從前述函數的返回結果中抽取相應的事務日志文件名稱和字節偏移量。例如: ``` postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); file_name | file_offset --------------------------+------------- 00000001000000000000000D | 4039624 (1 row) ``` 類似的,`pg_xlogfile_name`僅僅抽取事務日志文件名稱。 如果給定的事務日志位置恰好位于事務日志文件的交界上,這兩個函數都返回前一個事務日志文件的名字。 這對于管理事務日志歸檔來說通常是期望的行為,因為前一個文件是當前最后一個需要歸檔的文件。 `pg_xlog_location_diff`計算兩個事務日志位置之間在字節上的不同。 它可以和`pg_stat_replication`或[Table 9-60](#calibre_link-1642) 里面的一些函數一起使用以獲取復制滯后。 有關正確使用這些函數的細節,參閱[Section 24.3](#calibre_link-466)。 ## 9.26.4\. 恢復控制函數 [Table 9-61](#calibre_link-1049)里顯示的函數提供了當前備機狀態的信息。 這些函數可能在恢復期間或正常運行中執行。 **Table 9-61\. 恢復信息函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_is_in_recovery()`` | `bool` | 如果恢復仍然在進行中則返回true。 | | ``pg_last_xlog_receive_location()`` | `text` | 獲取最后一個事務日志接收并通過流媒體復制同步到磁盤的位置。 如果流復制仍在進行,這將單調增加。如果恢復已完成, 那么這個值將保持靜止在恢復期間最后接收和同步到磁盤的WAL記錄值。 如果不能用流復制,或還沒有開始,這個函數返回NULL。 | | ``pg_last_xlog_replay_location()`` | `text` | 獲取最后一個事物日志在恢復時重放的位置。如果恢復仍在進行,這將單調增加。 如果恢復已經完成,那么這個值將保持靜止在恢復期間最后應用的WAL記錄值。 當服務已經沒有恢復的正常啟動時,這個函數返回NULL。 | | ``pg_last_xact_replay_timestamp()`` | `timestamp with time zone` | 獲取最后一個事物在恢復時重放的時間戳。這是為在主節點上生成的事務提交或終止WAL記錄的時間。 如果沒有事務在恢復時重放,那么這個函數返回NULL。否則,如果恢復仍在進行, 那么這將單調增加。如果恢復已經完成,那么這個值將保持靜止在恢復時最后事務應用的值。 當服務已經沒有恢復的正常啟動時,這個函數返回NULL。 | [Table 9-62](#calibre_link-1693)里的函數控制恢復的進程。 這些函數可能只在恢復時被執行。 **Table 9-62\. 恢復控制函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_is_xlog_replay_paused()`` | `bool` | 如果恢復暫停則返回true。 | | ``pg_xlog_replay_pause()`` | `void` | 立即暫停恢復。 | | ``pg_xlog_replay_resume()`` | `void` | 如果恢復暫停了那么重新啟動。 | 當恢復暫停時,沒有進一步的數據庫更改。如果是在熱備里,所有新的查詢將看到相同一致的數據庫快照, 并且不會有進一步的查詢沖突產生,直到恢復繼續。 如果不能使用流復制,那么暫停狀態將沒有問題的無限的延續。 當流復制正在進行時,將連續接收WAL記錄,這將最終填滿可用磁盤空間,取決于暫停的持續時間, WAL生成的速度和可用的磁盤空間。 ## 9.26.5\. 快照同步函數 PostgreSQL允許數據庫會話同步他們的快照。_snapshot_ 決定哪個數據對于使用這個快照的事務是可見的。當兩個或更多會話需要查看數據庫中相同的內容時, 快照同步是必須的。如果兩個會話只是單獨的啟動它們的事務,仍然可能有某些事務在這兩個 `START TRANSACTION`命令執行之間提交,所以一個會話看到了那個事務的影響而另外一個沒有看到。 要解決這些問題,PostgreSQL允許一個事務_export_ 它正在使用的快照。只要導出事務保持打開,其他事務可以_import_ 它的快照,因此來保證他們看到的是與第一個事務看到的完全相同的數據庫視圖。 但是要注意的是,由任一這些事務做出的任何數據庫更改對其他事務保持不可見, 對由未提交的事務做出的更改同樣適用。所以事務是與已經存在的數據同步的, 但是對它們自己做的更改正常動作。 快照是由`pg_export_snapshot`函數輸出的,在[Table 9-63](#calibre_link-2337) 里面顯示,并且是由[SET TRANSACTION](#calibre_link-507)命令輸入的。 **Table 9-63\. 快照同步函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_export_snapshot()`` | `text` | 保存當前的快照并返回它的標識符 | 函數`pg_export_snapshot`保存當前的快照并返回一個`text`字符串標識這個快照。 這個字符串必須傳遞(在數據庫外面)給想要導入快照的客戶端。這個快照只在事務結束輸出它之前是可以導入的。 如果需要的話,一個事務可以輸出多個快照。請注意,這樣做只在`READ COMMITTED`事務中有用, 因為在`REPEATABLE READ`和更高的隔離級別,事務在他們的生存周期中使用相同的快照。 一旦一個事務已經輸出了任何的快照,它就不能使用[PREPARE TRANSACTION](#calibre_link-903)做好準備了。 參閱[SET TRANSACTION](#calibre_link-507)獲取如何使用一個輸出的快照的信息。 ## 9.26.6\. 數據庫對象管理函數 [Table 9-64](#calibre_link-1073)里顯示的函數計算數據庫對象使用的磁盤空間。 **Table 9-64\. 數據庫對象尺寸函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_column_size(```any`) | `int` | 存儲一個指定的數值需要的字節數(可能壓縮過) | | ``pg_database_size(```oid`) | `bigint` | 指定 OID 代表的數據庫使用的磁盤空間 | | ``pg_database_size(```name`) | `bigint` | 指定名稱的數據庫使用的磁盤空間 | | ``pg_indexes_size(```regclass`) | `bigint` | 附加到指定表的索引使用的總磁盤空間 | | ``pg_relation_size(```relation` `regclass`, `fork` `text`) | `bigint` | 指定表或索引的指定分叉樹(`'main'`, `'fsm'` 或 `'vm'`) 使用的磁盤空間 | | ``pg_relation_size(```relation` `regclass`) | `bigint` | `pg_relation_size(..., 'main')的簡寫` | | ``pg_size_pretty(```bigint`) | `text` | 把用64位整數表示的字節計算的尺寸轉換成一個人類易讀的尺寸 | | ``pg_size_pretty(```numeric`) | `text` | 把用數值表示的字節計算的尺寸轉換成一個人類易讀的尺寸 | | ``pg_table_size(```regclass`) | `bigint` | 指定的表使用的磁盤空間,不計索引(但是包含TOAST,自由空間映射和可見性映射) | | ``pg_tablespace_size(```oid`) | `bigint` | 指定 OID 代表的表空間使用的磁盤空間 | | ``pg_tablespace_size(```name`) | `bigint` | 指定名字的表空間使用的磁盤空間 | | ``pg_total_relation_size(```regclass`) | `bigint` | 指定的表使用的總磁盤空間,包括所有的索引和TOAST數據 | `pg_column_size`顯示用于存儲某個獨立數據值的空間。 `pg_total_relation_size`接受一個表或壓縮表的OID或名字, 并且返回那個表使用的總的在磁盤上的空間,包括所有相關的索引。 這個函數相當于`pg_table_size` `+` `pg_indexes_size` `pg_table_size`接受一個表的OID或名字,并且返回那個表需要的磁盤空間, 不包括索引。(包含TOAST空間,自由空間映射和可見性映射) `pg_indexes_size`接受一個表的OID或名字, 并且返回所有附加到這個表上的索引使用的總的磁盤空間。 `pg_database_size`和`pg_tablespace_size` 接受一個數據庫或表空間的OID或名字,并且返回該對象使用的總的磁盤空間。 `pg_relation_size`接受一個表、索引、壓縮表的 OID 或者名字, 然后返回它們以字節計的磁盤大小。指定`'main'` 或省略第二個參數返回這個關系的主數據支路的大小。指定`'fsm'` 返回和這個關系有關的自由空間映射(參閱[Section 58.3](#calibre_link-1512))的大小。 指定`'vm'`返回和這個關系有關的可見性映射 (參閱[Section 58.4](#calibre_link-1513))的大小。請注意,這個函數只顯示一個支路的大小; 更多的是想更方便的使用高級函數`pg_total_relation_size`或`pg_table_size`。 `pg_size_pretty`用于把其它函數的結果格式化成一種人類易讀的格式, 可以根據情況使用KB 、MB 、GB 、TB 。 以上操作在表或索引上的函數接受一個`regclass`參數,這個參數簡單的是表的OID 或`pg_class`系統目錄中的索引。你不需要手動的去查看OID, 因為`regclass`數據類型的輸入轉換將為你做這件事。只需要寫下包含在單引號中的表名, 這樣看起來像是一個字符串常量。為了與普通的SQL名字的處理兼容, 這個字符串將被轉換成小寫,除非表名用雙引號括起。 如果一個不代表活動對象的OID傳遞給以上一個函數的參數,那么返回NULL。 [Table 9-65](#calibre_link-2338)里顯示的函數幫助標識指定的與數據庫對象有關的磁盤文件。 **Table 9-65\. 數據庫對象位置函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_relation_filenode(```relation` `regclass`) | `oid` | 指定關系的文件節點數 | | ``pg_relation_filepath(```relation` `regclass`) | `text` | 指定關系的文件路徑名 | `pg_relation_filenode`接受一個表、索引、序列或壓縮表的OID或者名字, 并且返回當前分配給它的"filenode"數。文件節點是關系使用的文件名字的基本組件 (參閱[Section 58.1](#calibre_link-1511)獲取更多信息)。對大多數表來說, 結果和`pg_class`.`relfilenode`相同,但對確定的系統目錄來說, `relfilenode`為0而且這個函數必須用來獲取正確的值。 如果傳遞一個沒有存儲的關系,比如一個視圖,那么這個函數返回NULL。 `pg_relation_filepath`類似于`pg_relation_filenode`, 但是它返回關系的整個文件路徑名(相對于數據庫集群的數據目錄`PGDATA`)。 ## 9.26.7\. 通用文件訪問函數 [Table 9-66](#calibre_link-2339) 里的函數提供了對數據庫服務器所在機器上的文件的本地訪問接口。 只有那些在數據庫集群目錄和`log_directory`目錄里面的文件可以訪問。 使用相對路徑訪問集群目錄里面的文件,以及匹配`log_directory` 配置設置的路徑訪問日志文件。只有超級用戶才能使用這些函數。 **Table 9-66\. 通用文件訪問函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_ls_dir(```dirname` `text`) | `setof text` | 列出目錄中的文件 | | ``pg_read_file(```filename` `text` [, `offset` `bigint`, `length` `bigint`]) | `text` | 返回一個文本文件的內容 | | ``pg_read_binary_file(```filename` `text` [, `offset` `bigint`, `length` `bigint`]) | `bytea` | 返回一個文件的內容 | | ``pg_stat_file(```filename` `text`) | `record` | 返回一個文件的信息 | `pg_ls_dir`返回指定目錄里面的除了特殊項"`.`" 和"`..`"之外的所有名字。 `pg_read_file`返回一個文本文件的一部分,從`offset`開始, 返回最多`length`字節(如果先達到文件結尾,則小于這個數值)。 如果`offset`是負數,那么它就是相對于文件結尾回退的長度。 如果省略了`offset`和`length`,則返回整個文件。 從文件讀取到的字節在服務器編碼里被解釋為一個字符串; 如果它們在那種編碼下是不可用的則拋出一個錯誤。 `pg_read_binary_file`類似于`pg_read_file`, 除了結果是`bytea`值;因此,不執行編碼檢查。 與`convert_from`函數結合,這個函數可以用來讀取用指定編碼的一個文件。 ``` SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); ``` `pg_stat_file`返回一個記錄,這個記錄包含文件大小, 最后訪問的時間戳,最后修改的時間戳,最后文件狀態改變的時間戳(只在Unix平臺上), 文件創建的時間戳(只在Windows),和一個`boolean`表明是否為一個路徑。 典型的用法包括: ``` SELECT * FROM pg_stat_file('filename'); SELECT (pg_stat_file('filename')).modification; ``` ## 9.26.8\. 咨詢鎖函數 [Table 9-67](#calibre_link-2340)中的函數用于管理咨詢鎖(Advisory Lock)。 有關正確使用這些函數的細節,參閱[Section 13.3.4](#calibre_link-1164)。 **Table 9-67\. 咨詢鎖函數** | 名字 | 返回類型 | 描述 | | --- | --- | --- | | ``pg_advisory_lock(```key` `bigint`) | `void` | 獲取排他會話級別咨詢鎖 | | ``pg_advisory_lock(```key1` `int`, `key2` `int`) | `void` | 獲取排他會話級別咨詢鎖 | | ``pg_advisory_lock_shared(```key` `bigint`) | `void` | 獲取共享會話級別咨詢鎖 | | ``pg_advisory_lock_shared(```key1` `int`, `key2` `int`) | `void` | 獲取共享會話級別咨詢鎖 | | ``pg_advisory_unlock(```key` `bigint`) | `boolean` | 釋放一個排他會話級別咨詢鎖 | | ``pg_advisory_unlock(```key1` `int`, `key2` `int`) | `boolean` | 釋放一個排他會話級別咨詢鎖 | | ``pg_advisory_unlock_all()`` | `void` | 釋放所有當前會話持有的會話級別咨詢鎖 | | ``pg_advisory_unlock_shared(```key` `bigint`) | `boolean` | 釋放一個共享會話級別咨詢鎖 | | ``pg_advisory_unlock_shared(```key1` `int`, `key2` `int`) | `boolean` | 釋放一個共享會話級別咨詢鎖 | | ``pg_advisory_xact_lock(```key` `bigint`) | `void` | 獲取排他事務級別咨詢鎖 | | ``pg_advisory_xact_lock(```key1` `int`, `key2` `int`) | `void` | 獲取排他事務級別咨詢鎖 | | ``pg_advisory_xact_lock_shared(```key` `bigint`) | `void` | 獲取共享事務級別咨詢鎖 | | ``pg_advisory_xact_lock_shared(```key1` `int`, `key2` `int`) | `void` | 獲取共享事務級別咨詢鎖 | | ``pg_try_advisory_lock(```key` `bigint`) | `boolean` | 嘗試獲取排他會話級別咨詢鎖 | | ``pg_try_advisory_lock(```key1` `int`, `key2` `int`) | `boolean` | 嘗試獲取排他會話級別咨詢鎖 | | ``pg_try_advisory_lock_shared(```key` `bigint`) | `boolean` | 嘗試獲取共享會話級別咨詢鎖 | | ``pg_try_advisory_lock_shared(```key1` `int`, `key2` `int`) | `boolean` | 嘗試獲取共享會話級別咨詢鎖 | | ``pg_try_advisory_xact_lock(```key` `bigint`) | `boolean` | 嘗試獲取排他事務級別咨詢鎖 | | ``pg_try_advisory_xact_lock(```key1` `int`, `key2` `int`) | `boolean` | 嘗試獲取排他事務級別咨詢鎖 | | ``pg_try_advisory_xact_lock_shared(```key` `bigint`) | `boolean` | 嘗試獲取共享事務級別咨詢鎖 | | ``pg_try_advisory_xact_lock_shared(```key1` `int`, `key2` `int`) | `boolean` | 嘗試獲取共享事務級別咨詢鎖 | `pg_advisory_lock`鎖定一個應用程序定義的資源, 該資源可以用一個 64 位或兩個不重疊的 32 位鍵值標識。如果已經有另外的會話鎖定了該資源, 那么該函數將會阻塞到該資源可用為止。這個鎖是排它的。多個鎖定請求將會被壓入棧中,因此, 如果同一個資源被鎖定了三次,那么它必須被解鎖三次以將資源釋放給其它會話使用。 `pg_advisory_lock_shared`類似于`pg_advisory_lock`, 不同之處僅在于共享鎖可以和其它請求共享鎖的會話共享,但排他鎖除外。 `pg_try_advisory_lock`類似于`pg_advisory_lock`, 不同之處在于該函數不會阻塞以等待資源的釋放。它要么立即獲得鎖并返回`true`, 要么返回`false`表示目前不能鎖定。 `pg_try_advisory_lock_shared`類似于`pg_try_advisory_lock`, 不同之處在于該函數嘗試獲得一個共享鎖而不是一個排它鎖。 `pg_advisory_unlock`釋放先前取得的排他會話級別咨詢鎖。 如果釋放成功則返回`true`。如果指定的鎖并未持有, 那么它將返回`false`并且服務器會報告一條 SQL 警告信息。 `pg_advisory_unlock_shared`類似于`pg_advisory_unlock`, 不同之處在于該函數釋放的是共享會話級別咨詢鎖。 `pg_advisory_unlock_all`將會釋放當前會話持有的所有會話級別咨詢鎖, 該函數在會話結束的時候被隱含調用,即使客戶端異常地斷開連接也是一樣。 `pg_advisory_xact_lock`類似于`pg_advisory_lock`, 不同之處在于鎖是自動在當前事務的結束釋放的,而且不能被顯式的釋放。 `pg_advisory_xact_lock_shared`類似于 `pg_advisory_lock_shared`, 不同之處在于鎖是自動在當前事務的結束釋放的,而且不能被顯式的釋放。 `pg_try_advisory_xact_lock`類似于`pg_try_advisory_lock`, 不同之處在于鎖,如果得到,是自動在當前事務的結束釋放的,而且不能被顯式的釋放。 `pg_try_advisory_xact_lock_shared`類似于`pg_try_advisory_lock_shared`, 不同之處在于鎖,如果得到,是自動在當前事務的結束釋放的,而且不能被顯式的釋放。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看