Postgresql 數據庫控制解析(一)

前面咱們經過「探索postgresql數據庫(一)」和「探索postgresql數據庫(二)」基本瞭解了postgresql數據庫。接下來本文開始介紹下數據庫控制(server control)。。

1、手動開啓數據庫(Starting the database server manually)
默認postgresql會隨着系統自動啓動,不過有時候設置改動可能須要手動中止或者啓動數據庫。
首先須要區別server和service兩個概念。server指的是database server和他的一些進程,service指的是操做系統中被server包裝起來的服務。server本質上能夠在不一樣平臺上以相同的方式工做,可是service就會由於各個操做系統不一樣而不一樣。
在全部操做系統平臺,都有命令來啓動postgresql server,如:

UBUNTU/DEBIAN pg_ctlcluster 9.0 main reload
RED HAT/FEDORA pg_ctl -D /var/lib/pgsql/data start
SOLARIS pg_ctl -D /var/lib/pgsql/data start
MAC OS pg_ctl -D /var/lib/pgsql/data start
FREEBSD pg_ctl -D /var/lib/pgsql/data start

在有些平臺,也能夠用這些命令啓動。

RED HAT/FEDORA service postgresql start
WINDOWS net start postgres

2、安全快速中止數據庫(Stopping the server safely and quickly)
能夠用如下命令快速中止數據庫:

pg_ctl -D datadir -m fast stop
若是想快速中止,就必定要加-m fast這個參數,由於默認postgresql是須要等全部用戶結束纔會關閉的。使用fast快速中止命令,全部用戶在進行的操做都會終止。在關閉數據庫時,postgresql和其餘如Oracle, DB2, 或者SQLServer關係型數據庫的區別是postgresql的事務回滾很是快,而其餘數據庫關閉可能須要很長時間。

3、緊急中止數據庫(Stopping the server in an emergency)

pg_ctl -D datadir stop -m immediate
使用immediate模式和fast模式同樣,都會強制停止全部用戶的事務,關閉鏈接。不過immediate模式至關於數據庫經歷了崩潰,好比斷電。下次重啓時緩存的文件須要重建,數據庫本身也須要對崩潰進行恢復。
須要dba注意的是,Oracle中的immediate模式至關於強制關閉數據庫,postgresql和oracle這個是不同的。

4、從新加載數據庫配置文件(Reloading the server configuration files)
postgresql配置文件中的一些參數須要從新加載纔會生效。如下是各個操做系統平臺從新加載的命令:

UBUNTU/DEBIAN pg_ctlcluster 9.0 main reload
RED HAT/FEDORA service postgresql reload 或pg_ctl -D /var/lib/pgsql/data reload
SOLARIS pg_ctl -D /var/lib/pgsql/data reload
MAC OS pg_ctl -D /var/lib/pgsql/data reload
FREEBSD pg_ctl -D /var/lib/pgsql/data reload

咱們也能夠在鏈接postgresql的時候從新加載配置文件,不過前提是你登錄的是超級用戶:

postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
在pg_settings這個系統表中有一個context字段,若是字段值是」sighup」,那麼就必需要reload。如下列出在數據庫配置中可能須要改變的參數:

forummon=# select name,setting,unit,(source='default') as is_default from pg_settings
where context ='sighup' and (name like '%delay' or name like '%timeout') and setting !='0' ;
name | setting | unit | is_default
------------------------------+---------+------+------------
authentication_timeout | 60 | s | t
autovacuum_vacuum_cost_delay | 20 | ms | t
bgwriter_delay | 200 | ms | t
checkpoint_timeout | 300 | s | t
max_standby_archive_delay | 30000 | ms | t
max_standby_streaming_delay | 30000 | ms | t
wal_receiver_timeout | 60000 | ms | t
wal_sender_timeout | 60000 | ms | t
wal_writer_delay | 200 | ms | t
(9 rows)
5、快速重啓數據庫(Restarting the server quickly)
有些數據庫配置的修改必需要求重啓數據庫,如何快速重啓就顯得特別重要。固然重啓最好是在數據庫壓力很小的時候。
基礎快速重啓命令:

pg_ctl -D datadir restart -m fast
重啓表面上看是先中止,在啓動,很簡單的一個步驟。在大多數狀況下,這個確實很簡單。

6、防止新連接(Preventing new connections)
在某些緊急狀況下,dba們可能須要徹底鎖定數據庫,或者靜止特定的人鏈接。
一下是防止新連接的幾個方法:
一、暫停或者恢復會話池;後面介紹
二、關閉數據庫,不推薦這樣作;
三、設置特定數據庫的鏈接數爲0;
ALTER DATABASE foo_db CONNECTION LIMIT 0;
這個能夠限制除了超級用戶外的其餘用戶。
四、設置特定用戶的鏈接數爲0
ALTER USER foo CONNECTION LIMIT 0;
這個能夠限制除了超級用戶外的其餘用戶。
五、修改host-based authentication (HBA)文件,從新加載數據庫
先備份下pg_hba.conf文件,修改pg_hba.conf文件。
###以下兩行將會禁止全部用戶鏈接數據庫,包括超級用戶:

# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all all reject
host all all 0.0.0.0/0 reject
###若是須要讓postgres這個超級用戶鏈接,能夠修改爲以下設置:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres ident
local all all reject
host all all 0.0.0.0/0 reject
d.從新加載數據庫

7、限制每一個鏈接用戶只能打開一個session(Restricting users to just one session each)
若是須要控制服務器資源,你可能會但願一個用戶只能同時打開一個session鏈接。固然這個也能夠用來限制用戶,這個上面已經有介紹。如下是基本命令:

postgres=# ALTER ROLE fred CONNECTION LIMIT 1;
須要取消限制能夠把值設爲-1。
查詢用戶連接限制

SELECT rolconnlimit FROM pg_roles WHERE rolname = 'postgres';
查看用戶當前鏈接數

SELECT count(*) FROM pg_stat_activity WHERE usename = 'postgres';

原文連接: http://www.sijitao.net/1454.html
相關文章
相關標籤/搜索