postgres

Name

postgres -- 以單用戶模式運行一個 PostgreSQL服務器

Synopsis

postgres [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [--describe-config] [-D datadir] [-e] [-E] [-f s | i | t | n | m | h ] [-F] [-N] [-o filename] [-O] [-P] [-s | -t pa | pl | ex ] [-S sort-mem] [-W seconds] [--name=value] database
postgres [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-e] [-f s | i | t | n | m | h ] [-F] [-o filename] [-O] [-p database] [-P] [-s | -t pa | pl | ex ] [-S sort-mem] [-v protocol] [-W seconds] [--name=value]

描述

可執行程序 postgres 是真正處理查詢的 PostgreSQL 服務器進程。 通常它是不會被直接調用的;而是啟動一個 postmaster 多用戶服務器。

上面的第二種形式就是 postmaster調用 postgres 的方法(只是概念上的,因為 postmasterpostgres 實際上是一樣的程序); 我們不能這樣直接調用它。第一種形式以交互單用戶模式直接調用該服務器。 這種用法的主要用途是在 initdb 做初始化時用。有時候它被用做調試災難性恢復。

當從 shell 上以交互模式調用時,用戶可以輸入查詢並且結果會打印在屏幕上, 不過格式對開發人員更有用,對用戶卻差好多。 不過請記住,運行一個單用戶服務器並不適合于調試該服務器, 因為沒有實際的進程間通訊和鎖動作發生。

當運行一個單用戶服務器時,將把會話用戶設置為 ID 為 1 的用戶。 該用戶不必實際存在,因此一個獨立運行的服務器可以用于對某些意外損壞的系統表中進行手工恢復。 在獨立運行模式下,系統隱含地賦予 ID 為 1 的用戶超級用戶權限。

選項

如果 postgres 是由一個 postmaster 啟動的,那麼它繼承後者的所有選項集。另外 postgres 相關的選項可以用 -o 開關從 postmaster 傳遞。

你可以通過設置一個配置文件來避免鍵入這些選項。 參閱Section 16.4獲取細節。 有些(安全的)選項還可以從聯接過來的客戶端設置, 這樣就獲得了一種應用無關的方法。 比如,如果設置了 PGOPTIONS 環境變量, 那麼基于libpq的客戶端就都把那個字串傳遞給服務器, 會解釋成 postgres 命令行選項。

通用用途

選項 -A-B-c-d-D, 和 -F,以及--namepostmaster 裡的有相同的含義。只是 -d 0 避免 postmaster 的調試級別傳播到 postgres

-e

把缺省日期風格設置為 "European",也就是說用"DMY"規則解釋日期輸入, 並且在一些日期輸出格式裡日子在月份前面打印。 參閱 Section 8.5 獲取更多細節。

-o filename

把所有服務器日志輸出到 filename。 如果服務器是由 postmaster運行的, 則忽略這個選項,並且使用從 postmaster 繼承過來的stderr

-P

掃描/更新系統記錄時忽略系統表。對系統表/索引使用 REINDEX 時需要這個選項。

-s

在每條命令結束時打印時間信息和其他統計信息。 這個開關對測試性能和調節緩衝區數量有好處。

-Ssort-mem

聲明內部排序和散列在求助于臨時磁盤文件之前可以使用的內存數量。 該值是以 KB (千字節)為單位的,缺省是 1024 KB。 注意對于復雜查詢,可能有好幾個並行的排序和/或散列, 而在它們把數據放到臨時文件前,每個都會允許使用最多 sort-mem KB的內存。

單用戶模式的選項

database

聲明要訪問的數據庫的名字。如果忽略掉則缺省為用戶名。

-E

回顯所有命令。

-N

關閉把新行作為語句分隔符。

半內部選項

還有幾個其他的選項可以聲明,主要用于調試用途。 這些東西在這裡列出只是給 PostgreSQL 系統開發人員使用的。 我們強烈反對使用這些選項。 另外這些選項的任何一項都可能在未來版本中消失而不加說明。

-f{ s | i | m | n | h }

禁止某種掃描和連接方法的使用: si 分別關閉順序和索引掃描,而 nm,和 h 分別關閉嵌套循環,融合(merge)和散列連接。

注意: 順序掃描和嵌套循環都不可能完全被關閉。 -fs-fn 選項僅僅是在存在其他方法時阻 礙優化器使用這些方法罷了。

-O

允許修改系統表的結構。這個參數用于 initdb

-pdatabase

告訴服務器服務器它是由一個 postmaster 啟動的並聲明要使用的數據庫等。

-t pa[rser] | pl[anner] | e[xecutor]

打印與每個主要系統模塊相關的查詢記時統計。 它不能和 -s選項一塊使用。

-vprotocol

聲明這次會話使用的前/服務器協議的版本數。

-Wseconds

一旦看見這個選項,進程就睡眠標出的秒數。 這樣就給開發者一些時間把調試器附著在該服務器進程上。

--describe-config

這個選項以 tab 分隔的 COPY 格式,倒出服務器內部配置變量,描述和缺省之。 設計它主要是給管理工具使用。

環境

PGDATA

缺省數據目錄位置

對于其它的在單用戶模式裡有一點點影響的環境變量,請參閱 postmaster

注意

要停止運行一個查詢,使用 SIGINT 給正在運行該命令的 postgres 進程發信號。

要告訴 postgres 重新讀取配置文件, 使用一個 SIGHUP 信號。 通常我們最好給 postmaster 發送 SIGHUPpostmaster 將隨後 SIGHUP 他的每個子進程。 但是有時候我們可能想只讓一個 postgres 進程重裝載配置文件。

postmaster 使用 SIGTERM 告訴postgres進程正常退出, 而 SIGQUIT 是不經過正常清理的退出。 這些信號不應該由用戶使用。 給一個 postgres 進程發送 SIGKILL 也是不明智的 ── postmaster 將把這個信號解釋成一次在 postgres 裡的崩潰, 並且會強制所有他的子 postgres 進程像在一個標準的崩潰-恢復過程裡一樣退出。

用法

用下面這樣的命令啟動一個獨立的服務器

postgres -D $PGDATA other-options my_database

-D 給服務器提供正確的數據庫目錄的路徑, 或者確保環境變量 PGDATA 已經正確設置。 同時還要聲名你象用的特定數據庫名字。

通常,獨立運行的服務器把換行符當做命令輸入完成字符; 它還不懂分號的作用,因為那些東西是在 psql 裡的。 要想把一行分成多行寫,你必需在除最後一個換行符以外的每個換行符前面敲一個反斜槓。

但是如果你使用 -N 命令行開關,那麼換行符就不會中止命令輸入。 服務器將從標準輸入讀取數據,直到碰到文件結尾(EOF), 然後把輸入當做一個單個的命令字串處理。這個時候反斜槓-換行符就不再當做特殊情況處理。

要退出會話,鍵入EOF通常是 Control+D)。 如果你已經使用了 -N,需要用兩個連續的EOF來退出。

請注意獨立運行的服務器不會提供復雜的行編輯功能(比如,沒有命令行歷史)。

又見

initdb, ipcclean, postmaster