1. 程式人生 > 資料庫 >postgresql 實現啟動、狀態檢視、關閉

postgresql 實現啟動、狀態檢視、關閉

利用psql啟動資料庫

[postgres@highgo ~]$ pg_ctl start

檢視系統中執行的postgres程序

#ps -ef | grep postgres

連線postgresql資料庫

#psql -h 127.0.0.1 -d postgres -U postgres

停止postgresql資料庫例項

#pg_ctl stop
#ps -ef | grep postgres

啟動伺服器最簡單的方法是像下面這樣:

$ postgres -D /usr/local/pgsql/data

最好在後臺啟動postgres,使用下面的 Unix shell 語法:

$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &

要做一次快速關閉:

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

如果啟動失敗提示一下資訊

LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not,wait a few seconds and retry.
FATAL: could not create TCP/IP listen socket

解決方法:

檢視埠在用

netstat -lanp|grep 5432
ps -ef|grep postgres
498    673  1 0 10:50 ?    00:00:00/usr/bin/postgres -D /var/lib/cloudera-scm-server-db/data

kill程序

kill -9 673

重啟啟動服務

service start
service status

補充:PostgreSQL 四種程序啟動方式

Postgres在啟動後,可分別以一下四種形式啟動程序:

1、SubPostmasterMain

2、AuxiliaryProcessMain

3、PostgresMain

4、PostmasterMain

SubPostmasterMain(–fork)

指明由postmaster派生

設定程序ID

初始化記憶體池

處理輸入引數

執行相應的backend或子程序

–forkbackend或–forkboot

1) 關聯到共享記憶體

2) 初始化共享記憶體訪問(UsedShmemSegAddr)

3) 初始化AuxiliaryProcess

4) 建立共享記憶體和訊號量

5) 啟動AuxiliaryProcessMain

–forkavlauncher

1) 關聯到共享記憶體

2) AutovacuumLauncherIAm()

3) 初始化共享記憶體訪問(UsedShmemSegAddr)

4) 初始化AuxiliaryProcess

5) 建立共享記憶體和訊號量

6) 啟動AutoVacLauncherMain

–forkavworker

1) 關聯到共享記憶體

2) AutovacuumLauncherIAm()

3) 初始化共享記憶體訪問(UsedShmemSegAddr)

4) 初始化AuxiliaryProcess

5) 建立共享記憶體和訊號量

6) 啟動AutoVacWorkerMain

–forkarch

1) 啟動PgArchiverMain

–forkcol

1) 啟動PgstatCollectorMain

–forklog

1) 啟動SysLoggerMain

AuxiliaryProcessMain(–boot)

設定程序ID

初始化記憶體池

設定路徑、時間等變數

初始化GUC選項,處理輸入引數

以BootstrapProcessing模式初始化一個backend:ipc,lock,file,storage,buffer

設定訊號處理控制代碼

以NormalProcessing狀態針對不同auxType分別進行以下處理

a) CheckerProcess

1) 啟動CheckerModeMain

b) BooststrapProcess

1) BootstrapXLOG

2) 啟動XLOG

3) 啟動BootstrapModeMain

c) StartupProcess

1) 啟動XLOG

2) 載入FreeSpaceMap

3) BuildFlatFiles(false)

d) BgWriterProcess

1) 初始化XLOG訪問

2) 啟動BackgroundWriterMain

e) WalWriterProcess

1) 初始化XLOG訪問

2) 啟動WalWriterMain

PostgresMain(–single)

設定程序ID

初始化記憶體池

設定路徑、時間等變數

初始化GUC選項,處理輸入引數和其他startup packet中的引數

設定訊號處理控制代碼

初始化一個backend(無論它是否由postmaster生成):ipc,buffer

啟動XLOG

載入FreeSpaceMap

初始化程序

初始化表快取和系統目錄訪問

處理預載入的庫

轉到MessageContext記憶體池

進入查詢處理主迴圈

PostmasterMain

設定程序ID

初始化記憶體池

設定路徑、時間等變數

初始化GUC選項,處理輸入引數並載入hba和ident

設定共享記憶體和訊號量,初始化共享資料結構

設定訊號處理控制代碼

啟動守護程序:

(1) syslogger:收集其他其他程序的日誌輸出,寫入到檔案

(2) stats daemon:通過UDP獲取各backend的執行時統計資訊

(3) autovacuum launcher:定期進行表空間的自動清理

由引數forkboot啟動一個backend

繫結到TCP socket,監聽連線請求

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。