1. 程式人生 > >postgresql 的一些變數和密碼檔案

postgresql 的一些變數和密碼檔案

一些變數

下列環境變數能被用於選擇預設的連線引數值,如果呼叫程式碼沒有直接指定值,它們將被用於PQconnectdb、PQsetdbLogin和PQsetdb。例如,這些有助於防止資料庫連線資訊被硬編碼到簡單的客戶端應用中。

PGHOST的行為和host連線引數相同。

PGHOSTADDR的行為和hostaddr連線引數相同。可以設定它來替代或者作為PGHOST的補充來防止 DNS 查詢負擔。

PGPORT的行為和port連線引數相同。

PGDATABASE的行為和dbname連線引數相同。

PGUSER的行為和user連線引數相同。

PGPASSWORD的行為和password連線引數相同。出於安全原因,我們不推薦使用這個環境變數,因為某些作業系統允許非根使用者通過ps看到程序的環境變數。可以考慮使用~/.pgpass檔案(見第 32.15 節)。

PGPASSFILE指定要用於查詢的口令檔案的名稱。如果沒有設定,預設為~/.pgpass(見第 32.15 節)。

PGSERVICE的行為和service連線引數相同。

PGSERVICEFILE指定針對每個使用者的連線服務檔名。如果沒有設定,預設為~/.pg_service.conf(見第 32.16 節)。

如果PostgreSQL要使用的 Kerberos 領域和本地領域不同,PGREALM可以設定它。如果PGREALM被設定,libpq應用將嘗試通過伺服器鑑定這個領域並且使用獨立的票據檔案來避免與本地票據檔案衝突。只有在伺服器選擇了 GSSAPI 認證時,這個環境變數才被使用。

PGOPTIONS的行為和options連線引數相同。

PGAPPNAME的行為和application_name連線引數相同。

PGSSLMODE的行為和sslmode連線引數相同。

PGREQUIRESSL的行為和requiressl連線引數相同。

PGSSLCOMPRESSION的行為和sslcompression連線引數相同。

PGSSLCERT的行為和sslcert連線引數相同。

PGSSLKEY的行為和sslkey連線引數相同。

PGSSLROOTCERT的行為和sslrootcert連線引數相同。

PGSSLCRL的行為和sslcrl連線引數相同。

PGREQUIREPEER的行為和requirepeer連線引數相同。

PGKRBSRVNAME的行為和krbsrvname連線引數相同。

PGGSSLIB的行為和gsslib連線引數相同。

PGCONNECT_TIMEOUT的行為和connect_timeout連線引數相同。

PGCLIENTENCODING的行為和client_encoding連線引數相同。

下面的環境變數可用來為每一個PostgreSQL會話指定預設行為(為每一個使用者或每一個數據庫設定預設行為的方法還可見ALTER ROLE和ALTER DATABASE命令)。

PGDATESTYLE設定日期/時間表示的預設風格(等同於SET datestyle TO ...)。

PGTZ設定預設的時區(等同於SET timezone TO ...)。

PGGEQO為遺傳查詢優化器設定預設模式(等同於SET geqo TO ...)。

這些環境變數的正確值可參考SQL 命令 SET。

下面的環境變數決定libpq的內部行為,它們會覆蓋編譯在程式中的預設值。

PGSYSCONFDIR設定包含pg_service.conf檔案以及未來版本中可能出現的其他系統範圍配置檔案的目錄。

PGLOCALEDIR設定包含用於訊息本地化的locale檔案的目錄。

密碼檔案

一個使用者主目錄中的.pgpass檔案或者被PGPASSFILE引用的檔案可能包含在連線需要時使用的口令(並且其他情況不會指定口令)。在微軟的 Windows 上該檔案被命名為%APPDATA%\postgresql\pgpass.conf(其中%APPDATA%指的是使用者配置中的應用資料子目錄)。

這個檔案應該包含下列格式的行:

hostname:port:database:username:password

(你可以向該檔案增加一個提醒:把上面的行復制到該檔案並且在前面加上#)。前四個域的每一個都可以是文字值或者匹配任何東西的*。第一個匹配當前連線引數的行中的口令域將被使用(因此,在使用萬用字元時把更特殊的項放在前面)。如果一個條目需要包含:或者\,用\對該字元轉義。一個localhost主機名匹配來自本地機器的 TCP (主機名localhost)和 Unix 域套接字(pghost為空或者預設套接字目錄)連線。在一臺後備伺服器上,一個名為replication的資料庫名匹配到主控伺服器的流複製連線。database域的用途有限,因為使用者對同一個集簇中所有資料庫都有相同的口令。

在 Unix 系統上,.pgpass上的許可權必須不允許所有人或組內訪問,可以用命令 chmod 0600 ~/.pgpass 實現。如果許可權沒有這麼嚴格,該檔案將被忽略。在微軟 Windows 上,該檔案被假定儲存在一個安全的目錄中,因此不會進行特別的許可權檢查。