至少在Ubuntu下,以爲原生的apt-get管理方式更合適,PG的文件資源會被分配到應該的地方,Linux的系統文件結構也是種很是穩健的架構。例如在/etc/postgresql下能夠找到conf文件是一件清晰到爽的事情。正常經過apt安裝的方式參見這篇博文。sql
以前有一臺VM就是沒有忍住一時之快,用了Graphic Installer,全部的東西被塞到/opt/PostgreSQL/x.x中,固然,conf、bin等文件都在其中。在沒有手動配置的狀況下,start/stop/restart/reload之類的事情,不得不交給pg_ctl作,而與postgres帳戶之間的來回切換,也會浪費寶貴的時間。例如重啓PG須要數據庫
./pg_ctl restart -D ../data
而出現衝突的時候還會須要忍不住 -m fast 一下。而若是使用系統服務,至少能夠這樣:ubuntu
sudo /etc/init.d/postgresql restart
數據庫系統參數是很重要的功能,根據應用特色進行性能調優時,每每須要用到。目前用到的幾個參數裏,shared_buffers通常會盡可能設置大一些,有人建議設爲RAM的10%,其實我以爲更大一些也沒什麼問題。tcp_keepalives_idle做爲秒數表示空閒時間間隔,當一個tcp鏈接持續該時間閒置,db會發送tcp_keeplive包給客戶端,若連續tcp_keepalives_count個包都在tcp_keepalives_interval秒內沒有迴應,則會認爲這個tcp已死。服務器
修改postgresql.conf後能夠經過 select pg_reload_conf();從新加載配置。可是配置裏有些是支持動態的,而有些必需要重啓db,例如shared_buffers就如此,悲催。重加載或重啓後,可經過show <配置項>命令查看當前已生效的配置項值,例如:session
show tcp_keepalives_idle;
可調用PG自帶的一個視圖:架構
select * from pg_stat_activity
這個視圖能夠查出目前的鏈接,以及各自鏈接的狀態、時間點、SQL內容等,視圖內容:app
CREATE OR REPLACE VIEW pg_stat_activity AS SELECT s.datid, d.datname, s.procpid, s.usesysid, u.rolname AS usename, s.application_name, s.client_addr, s.client_hostname, s.client_port, s.backend_start, s.xact_start, s.query_start, s.waiting, s.current_query FROM pg_database d, pg_stat_get_activity(NULL::integer) s(datid, procpid, usesysid, application_name, current_query, waiting, xact_start, query_start, backend_start, client_addr, client_hostname, client_port), pg_authid u WHERE s.datid = d.oid AND s.usesysid = u.oid;
固然,只要不是很老的PG版本,能夠用pg_terminate_backend來終止相應的會話,這篇文章例舉了更多的使用場景。例如:less
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'databasename'
終止某個用戶的會話:tcp
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE usename = 'username'
若是以爲terminate太暴力,還可使用pg_cancel_backend。post