?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
Table 9-54顯示了那些可以用于查詢以及修改運行時配置參數(shù)的函數(shù)
Table 9-54. 配置設置函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
current_setting(setting_name)
|
text | 獲取當前的設置值 |
set_config(setting_name,
new_value,
is_local)
|
text | 設置參數(shù)并返回新值 |
current_setting
用于以查詢形式獲取setting_name設置的當前值。
它和SQL命令SHOW是等效的。例如:
SELECT current_setting('datestyle'); current_setting ----------------- ISO, MDY (1 row)
set_config
將參數(shù)setting_name設置為new_value。
如果is_local為true,
那么新值將只應用于當前事務。如果你希望新值應用于當前會話,
那么應該使用false。它等效于 SQL 命令SET。例如:
SELECT set_config('log_statement_stats', 'off', false); set_config ------------ off (1 row)
Table 9-55里的函數(shù)向其它服務器進程發(fā)送控制信號。只有超級用戶才能使用這些函數(shù)
Table 9-55. 服務器信號函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
pg_cancel_backend(pidint)
|
boolean | 取消一個后端的當前查詢 |
pg_terminate_backend(pidint)
|
boolean | 終止一個后端服務進程 |
pg_reload_conf()
|
boolean | 導致所有服務器進程重新裝載它們的配置文件 |
pg_rotate_logfile()
|
boolean | 滾動服務器的日志文件 |
如果成功,這些函數(shù)返回true,否則返回false
pg_cancel_backend
和pg_terminate_backend
向由 pid 標識的后端進程發(fā)送一個查詢取消(SIGINT)信號。
一個活動的后端進程的 PID 可以從pg_stat_activity視圖的 procpid 字段找到,或者在Unix服務器上用ps,
Windows上Task Manager任務管理器列出postgres進程。
pg_reload_conf
給服務器發(fā)送一個SIGHUP信號,導致所有服務器進程重新裝載配置文件。
pg_rotate_logfile
給日志文件管理器發(fā)送信號,告訴它立即切換到一個新的輸出文件。
這個函數(shù)只有在 redirect_stderr 用于日志輸出的時候才有用,否則根本不存在日志文件管理器子進程。
Table 9-56里的函數(shù)幫助我們進行在線備份。在恢復中不能執(zhí)行這些函數(shù)。只有超級用戶才能使用頭三個函數(shù)。
Table 9-56. 備份控制函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
pg_start_backup(labeltext[,fastboolean])
|
text | 準備執(zhí)行在線備份 |
pg_stop_backup()
|
text | 終止執(zhí)行在線備份 |
pg_switch_xlog()
|
text | 強制切換到一個新的事務日志文件 |
pg_current_xlog_location()
|
text | 獲取當前事務日志的寫入位置 |
pg_current_xlog_insert_location()
|
text | 獲取當前事務日志的插入位置 |
pg_xlogfile_name_offset(locationtext)
|
text,integer | 將事務日志的位置字符串轉換為文件名并返回在文件中的字節(jié)偏移量 |
pg_xlogfile_name(locationtext)
|
text | 將事務日志的位置字符串轉換為文件名 |
pg_start_backup
接受一個用戶定義的備份標簽(通常這是備份轉儲文件存放的名)。
這個函數(shù)向數(shù)據(jù)庫集群的數(shù)據(jù)目錄寫入一個備份標簽文件backup_label),
然后以文本方式返回備份的事務日志起始位置。用戶不需要關心這個返回值,提供它只是為了萬一需要的場合
postgres=# select pg_start_backup('label_goes_here'); pg_start_backup ----------------- 0/D4445B8 (1 row)
這里有個可選的第二個boolean類型的參數(shù)。如果true,將指定盡可能快速執(zhí)行pg_start_backup
。
在I/O操作插入的這些強制即時檢查點,減慢任何當前執(zhí)行的查詢。
pg_stop_backup
刪除pg_start_backup
創(chuàng)建的標簽文件,并且在事務日志歸檔區(qū)里創(chuàng)建一個
備份歷史文件。這個歷史文件包含給予pg_start_backup
的標簽、備份的事務日志
起始與終止位置、備份的起始和終止時間。返回值是備份的事務日志終止位置(同樣也
可能沒有什么用)。計算出中止位置后,當前事務日志的插入點將自動前進到下一個事務日志文件,
這樣,結束的事務日志文件可以被立即歸檔從而完成備份。
pg_switch_xlog
移動到下一個事務日志文件,以允許將當前日志文件歸檔(假定你使用連續(xù)歸檔)。
返回值是剛剛完成的事務日志文件的事務日志結束位置+1。如果自從最后一次事務日志切換以來沒有活動的事務日志,
那么pg_switch_xlog
什么事也不做,直接返回當前使用事務日志文件的開始位置。
pg_current_xlog_location
使用與前面那些函數(shù)相同的格式顯示當前事務日志的寫入位置。
類似的,pg_current_xlog_insert_location
顯示當前事務日志的插入點。
插入點是事務日志在某個瞬間的"邏輯終點",而實際的寫入位置則是從服務器內部
緩沖區(qū)寫出時的終點。寫入位置是可以從服務器外部檢測到的終點,如果想歸檔部分
完成的事務日志文件,那么這個通常就是你想要的結果。插入點主要用于服務器調試目的。
上述兩個函數(shù)既是只讀操作也不需要超級用戶權限。
從上所述函數(shù)的返回結果中抽取相應的事務日志文件名稱和字節(jié)偏移量。例如:
postgres=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup()); file_name | file_offset --------------------------+------------- 00000001000000000000000D | 4039624 (1 row)
類似的,pg_xlogfile_name
僅僅抽取事務日志文件名稱。如果給定的事務日志
位置恰好位于事務日志文件的交界上,這兩個函數(shù)都返回前一個事務日志文件的名字。
自從前一個文件是當前最后一個需要歸檔的文件,這對于管理事務日志歸檔來說通常是期望的行為。
有關正確使用這些函數(shù)的細節(jié),見Section 24.3。
Table 9-57顯示函數(shù)信息,提供有關當前備用數(shù)據(jù)庫狀態(tài)的信息。 這些函數(shù)可能在恢復和正常運行間運行。
Table 9-57. 恢復信息函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
pg_is_in_recovery()
|
bool | 如果恢復仍然在進程中,返回true。 |
pg_last_xlog_receive_location()
|
text | 獲取最后一個事務日志接收并通過流媒體復制同步到磁盤的位置。在流復制過程中,這將單向增加。 但是當流復制重啟時,將回到流復制的起始位置,即通常WAL文件的開頭(包含當前重播)位置。 如果恢復已完成,這會保持在最后WAL記錄值不變。在恢復過程中,接收并同步到磁盤的值。 如果不能用流復制,或還沒有開始,返回NULL。 |
pg_last_xlog_replay_location()
|
text | 獲取重播在恢復過程中的最后一個事務日志位置。如果恢復仍然在進程中,則將單向增加。 如果恢復已完成此值將保持靜態(tài)在最后WAL在恢復過程中應用一條記錄的值。 當服務器已啟動正常而無需恢復時,函數(shù)返回NULL。 |
Table 9-58中顯示的函數(shù)計算數(shù)據(jù)庫對象使用的實際磁盤空間
Table 9-58. 數(shù)據(jù)庫對象尺寸函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
pg_column_size(any) |
int | 存儲一個指定的數(shù)值需要的字節(jié)數(shù)(可能壓縮過) |
pg_total_relation_size(regclass)
|
bigint | 指定表OID或表名使用的總磁盤空間,包括所有索引和TOAST數(shù)據(jù)。 |
pg_table_size(regclass)
|
bigint | 指定表OID或表名使用的磁盤空間,除去索引(但是包含TOAST,自由空間映射和可視映射) |
pg_indexes_size(regclass)
|
bigint | 關聯(lián)指定表OID或表名的表索引的使用總磁盤空間 |
pg_database_size(oid)
|
bigint | 指定OID的數(shù)據(jù)庫使用的磁盤空間 |
pg_database_size(name)
|
bigint | 指定名稱的數(shù)據(jù)庫使用的磁盤空間 |
pg_tablespace_size(oid)
|
bigint | 指定 OID 的表空間使用的磁盤空間 |
pg_tablespace_size(name)
|
bigint | 指定名的表空間使用的磁盤空間。 |
pg_relation_size(relationregclass,forktext)
|
bigint | 一個指定OID或名的表或索引,通過指定fork('main', 'fsm'or'vm')所使用的磁盤空間。 |
pg_relation_size(relationregclass)
|
bigint | 簡寫為pg_relation_size(..., 'main') |
pg_size_pretty(bigint)
|
text | 把字節(jié)計算的大小轉換成一個人類易讀的大小 |
pg_column_size
顯示用于存儲某個獨立數(shù)據(jù)值的空間。
pg_total_relation_size
接受表OID或表名或toast表,返回該表包含所有關聯(lián)索引的總磁盤空間。這個函數(shù)等價于
pg_table_size
+pg_indexes_size
。
pg_table_size
接受一個表OID或名,返回該表需要的磁盤空間,除去索引。(包含TOAST 空間,自由空間映射和可見映射。)
pg_indexes_size
接受一個表OID或名,返回關聯(lián)該表的所有索引的總磁盤空間大小。
pg_database_size
和pg_tablespace_size
接受一個數(shù)據(jù)庫的OID或名,然后返回該對象使用的全部磁盤空間。
pg_relation_size
接受一個表、索引、toast表的 OID 或名字,然后返回它們以字節(jié)計的大小。
指定'main'或省去第二個參數(shù)返回關系中主數(shù)據(jù)fork的大小。指定'fsm'返回
關聯(lián)這個關系的自由空間映射大小。(見Section 54.3)指定'vm'返回關聯(lián)這個關系的可見映射大小。
(見Section 54.4)注意這個函數(shù)顯示只一個fork的大??;對于大多而言,使用高級別函數(shù)pg_total_relation_size
或pg_table_size
更方便。
pg_size_pretty
用于把其它函數(shù)的結果格式化成一種人類易讀的格式,可以根據(jù)情況使用KB 、MB 、GB 、TB
在Table 9-59顯示的函數(shù),有助于識別與數(shù)據(jù)庫對象相關的特定磁盤文件。
Table 9-59. 數(shù)據(jù)庫對象本地函數(shù)
名稱 | 名稱 | 描述 |
---|---|---|
pg_relation_filenode(relationregclass)
|
oid | 指定OID或名關系的Filenode數(shù) |
pg_relation_filepath(relationregclass)
|
text | 指定OID或名的關系的文件路徑名 |
pg_relation_filenode
接受一個表,索引,序列或toast表的OID或名,返回當前賦予的"filenode"數(shù)。
filenode是用于關系的文件名基本組件。(見Section 54.1獲取更多信息)。對于大多數(shù)表pg_class.relfilenode
的結果相同,但是對于某種系統(tǒng)表relfilenode是0,并且必須使用此函數(shù)獲取正確的值。
如果傳遞一個沒有存儲如視圖的關系,此函數(shù)將返回 NULL。
pg_relation_filepath
類似于pg_relation_filenode
,但它返回關系的整個文件的路徑名。
(相對于數(shù)據(jù)庫集群的數(shù)據(jù)目錄PGDATA)
Table 9-60里的函數(shù)提供了對數(shù)據(jù)庫服務器所在機器上的文件的本地訪問接口。 只有那些在數(shù)據(jù)庫集群目錄和log_directory目錄里面的文件可以訪問。使用相對路徑訪問集群目錄里面的文件,以及匹配 log_directory配置設置的路徑訪問日志文件。只有超級用戶才能使用這些函數(shù)。
Table 9-60. 通用文件訪問函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
pg_ls_dir(dirnametext)
|
setof text | 列出目錄中的文件 |
pg_read_file(filenametext,offsetbigint,lengthbigint)
|
text | 返回一個文本文件的內容 |
pg_stat_file(filenametext)
|
record | 返回一個文件的信息 |
pg_ls_dir
返回指定目錄里面的除了特殊項"."和".."之外所有名字
pg_read_file
返回一個文本文件的一部分,從offset開始,返回最多length
字節(jié)(如果先達到文件結尾,則小于這個數(shù)值)。如果offset是負數(shù),那么它就是相對于文件結尾回退的長度。
pg_stat_file
返回一條記錄,其中包含:文件大小、最后訪問時間戳、最后更改時間戳、
最后文件狀態(tài)修改時間戳(只在 Unix 平臺上可用)、文件創(chuàng)建
時間戳(只在 Windows 平臺上可用)、是否為目錄的boolean值。典型的用法:
SELECT * FROM pg_stat_file('filename'); SELECT (pg_stat_file('filename')).modification;
Table 9-61中的函數(shù)用于管理咨詢鎖(Advisory Lock)。有關正確使用這些函數(shù)的細節(jié),參閱Section 13.3.4
Table 9-61. 咨詢鎖函數(shù)
名稱 | 返回類型 | 描述 |
---|---|---|
pg_advisory_lock(keybigint)
|
void | 獲取排斥咨詢鎖 |
pg_advisory_lock(key1int,key2int)
|
void | 獲取排斥咨詢鎖 |
pg_advisory_lock_shared(keybigint)
|
void | 獲取共享咨詢鎖 |
pg_advisory_lock_shared(key1int,key2int)
|
void | 獲取共享咨詢鎖 |
pg_try_advisory_lock(keybigint)
|
boolean | 嘗試獲取排斥咨詢鎖 |
pg_try_advisory_lock(key1int,key2int)
|
boolean | 嘗試獲取排斥咨詢鎖 |
pg_try_advisory_lock_shared(keybigint)
|
boolean | 嘗試獲取共享咨詢鎖 |
pg_try_advisory_lock_shared(key1int,key2int)
|
boolean | 嘗試獲取共享咨詢鎖 |
pg_advisory_unlock(keybigint)
|
boolean | 釋放排斥咨詢鎖 |
pg_advisory_unlock(key1int,key2int)
|
boolean | 釋放排斥咨詢鎖 |
pg_advisory_unlock_shared(keybigint)
|
boolean | 釋放共享咨詢鎖 |
pg_advisory_unlock_shared(key1int,key2int)
|
boolean | 釋放共享咨詢鎖 |
pg_advisory_unlock_all()
|
void | 釋放當前會話持有的所有咨詢鎖 |
pg_advisory_lock
鎖定一個應用程序定義的資源,該資源可以用一個 64 位或兩個不重疊的 32
位鍵值標識。在pg_locks.objid指定鍵值類型。如果已經有另外的會話鎖定了該資源,那么該函數(shù)將會阻塞到該資源可用
為止。這個鎖是排斥的。多個鎖定請求將會被壓入棧中,因此,
如果同一個資源被鎖定了三次,那么它必須被解鎖三次以將資源釋放給其它會話使用。
pg_advisory_lock_shared
類似于pg_advisory_lock
,
不同之處僅在于共享鎖可以和其它請求共享鎖的會話共享,但排斥鎖除外。
pg_try_advisory_lock
類似于pg_advisory_lock
,不同之處在于該函數(shù)不會阻塞以等待資源的釋放。
它要么立即獲得鎖并返回true,要么返回false表示目前不能鎖定
pg_try_advisory_lock_shared
類似于pg_try_advisory_lock
,不同之處在于該函數(shù)嘗試獲得共享鎖而不是排斥鎖
pg_advisory_unlock
釋放先前取得的排斥咨詢鎖。如果釋放成功則返回true。如果指定的鎖實際上并未持有,
那么它將返回false并在服務器中產生一條 SQL 警告信息。
pg_advisory_unlock_shared
類似于pg_advisory_unlock
不同之處在于該函數(shù)釋放的是共享咨詢鎖
pg_advisory_unlock_all
將會釋放當前會話持有的所有咨詢鎖,該函數(shù)在會話結束的時候被隱含調用,即使客戶端異常地斷開連接也是一樣。