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,監聽連線請求
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。