vacuumdb — 資源回收並重新分析 PostgreSQL 資料庫
vacuumdb [
connection-option
...] [
option
...] [ --table | -t
table
[(
column
[,...] )] ] ... [
dbname
]
vacuumdb
[connection-option
...] [option
...] --all
| -a
vacuumdb 是一個用於清理 PostgreSQL 資料庫的工具程式。vacuumdb 也會產生 PostgreSQL 查詢最佳化程式所使用的內部統計資訊。
vacuumdb 只是一個將 SQL 指令 VACUUM 封裝起來的工具。透過此工具與透過其他方法存取伺服器之間,對資料庫進行清理和分析的工作並沒有任何區別。
vacuumdb 接受以下的命令列參數:
-a
--all
清理所有資料庫。
[-d]
dbname
[--dbname=]
dbname
指定要清理或分析的資料庫名稱。如果未指定,也未使用 -a(或--all),則從環境變數 PGDATABASE 中取得資料庫名稱。如果都未設定,則使用此連線所使用的使用者名稱。
-e
--echo
顯示 vacuumdb 產生並發送到伺服器的指令。
-f
--full
執行「完全」清理。
-F
--freeze
積極地「凍結」資料 tuple。
-j
njobs
--jobs=
njobs
透過同時執行 njobs 指令平行執行 vacuum 或 analyze 指令。此選項可以縮短處理時間,但也會增加資料庫伺服器的負載。
vacuumdb 將打開與資料庫的 njobs 連線,因此請確保您的 max_connections 設定夠高以容納所有連線。
請注意,如果平行處理某些系統目錄,則此選項與 -f(FULL)選項一起使用可能會導致鎖死而失敗。
-q
--quiet
不顯示進度訊息。
-t
table
[ (column
[,...]) ]
--table=
table
[ (column
[,...]) ]
僅清理或分析資料表。欄位名稱只能與 --analyze 或 --analyze-only 選項一起指定。以多個選項開關可以對多個資料表進行清理。
如果指定欄位,則可能必須從 shell 中跳脫括號。 (請參閱下面的例子。)
-v
--verbose
處理期間輸出詳細訊息。
V
--version
輸出 vacuumdb 版本後結束。
-z
--analyze
同時計算最佳化程序所使用的統計資訊。
-Z
--analyze-only
僅計算最佳化程序所使用的統計資訊(不做清理)。
--analyze-in-stages
僅計算最佳化程序所使用的統計資訊(不做清理),如同 --analyze-only。使用不同的設定執行幾個(目前是三個)分析階段,以更快地產可用的統計資訊。
此選項對於分析從還原備份或 pg_upgrade 新加入的資料庫非常有用。此選項將嘗試盡可能更快地建立一些統計資訊,使資料庫可用,然後在後續階段產生更完整的統計資訊。
-?
--help
顯示有關 vacuumdb 命令列參數的說明,然後結束。
vacuumdb 也在命令列中接受以下連線參數:
-h
host
--host=
host
指定執行伺服器的主機名稱。如果以斜線開頭,則將其用作 Unix domain socket 的目錄。
-p
port
--port=
port
指定伺服器正在監聽連線的 TCP 連接埠或本地 Unix domain socket 檔案的延伸名稱。
-U
username
--username=
username
要連線的使用者名稱。
-w
--no-password
不要發出密碼提示。如果伺服器需要密碼身份驗證,而其他方式(例如 .pgpass 檔案)無法使用密碼,則連線嘗試將會失敗。此選項在沒有使用者輸入密碼的批次處理作業腳本中非常有用。
-W
--password
強制 vacuumdb 在連線到資料庫之前提示輸入密碼。
此選項並不是必要的,因為如果伺服器需要密碼驗證,vacuumdb 將自動提示輸入密碼。只是,vacuumdb 會浪費連線嘗試,才能發現伺服器需要密碼。在某些情況下,值得輸入 -W 以避免額外的連線嘗試。
--maintenance-db=
dbname
指定要連線的資料庫名稱,以發現應該清理哪些其他資料庫。如果未指定,將使用 postgres 資料庫,如果 postgres 不存在的話,將使用 template1。
PGDATABASE
PGHOST
PGPORT
PGUSER
預設連線參數
與大多數其他 PostgreSQL 工具程式一樣,此工具也使用 libpq 所支援的環境變數(請參閱第 34.14 節)。
如果遇到困難,請參閱 VACUUM 和 psql 以了解潛在問題和錯誤訊息。資料庫伺服器必須在目標主機上執行。此外,將套用 libpq 前端函式庫使用的所有預設連線設定和環境變數。
vacuumdb 可能需要多次連線到 PostgreSQL 伺服器,而每次都會要求輸入密碼。在這種情況下,有一個 ~/.pgpass 檔案的話會很方便。有關更多訊息,請參閱第 34.15 節。
範例
要清理資料庫 test:
為最佳化程序清理並分析名為 bigdb 的資料庫:
要清理 xyzzy 資料庫中的資料表 foo,並為最佳化程序分析資料表的單個欄位: