以前文章介紹了控制解析一(http://www.sijitao.net/1454.html),今天博主把這章中接下來的部分也總結了下。 html
8、強制用戶斷開數據庫連接(Pushing users off the system)
有時咱們由於某些緣由須要把一些用戶強制下線,這時可使用 pg_terminate_backend()結束用戶會話進程。不過咱們首先須要取到對應用戶的pid,這個能夠在pg_stat_activity表中查詢。
例如: sql
1 |
forummon=# select datid,datname,pid,usename,application_name,client_addr from pg_stat_activity ; |
2 |
datid | datname | pid | usename | application_name | client_addr |
3 |
-------+----------+-------+----------+----------------------------+--------------- |
4 |
16402 | forummon | 10163 | postgres | psql.bin | |
5 |
16402 | forummon | 10509 | postgres | pgAdmin III - ???????????? | 192.168.0.111 |
查詢到有兩個客戶端連着着數據庫,一個是psql,一個是pgadmin。強制pgadmin用戶下線的命令以下: 數據庫
1 |
forummon=# select pg_terminate_backend(10509) ; |
9、使用多租戶(Deciding on a design for multi-tenancy)
當須要在一臺服務器上運行多個數據庫時,咱們有幾個辦法:a.在一個postgresql實體一個database中運行多個不一樣的schemas;b.在同一個postgresql實體中運行不一樣的database;c.在同一個服務器上運行多個postgresql實體;d.在相同服務器各自的虛擬機器中運行各自的postgresql實體。
若是咱們的目標是分離物理資源,那麼上面c、d比較合適;若是目標是安全,b可能就能夠解決;若是目標僅僅是隔開表讓結構清晰,那麼a或b比較有用。
multi-tenancy這個詞如今尚未徹底被說成術語,我暫時把他理解爲共享。 安全
10、使用多模式(Using multiple schemas)
好比數據庫有finance和sales兩個schema,登錄數據庫後通常默認的模式是public。若是你想讓特定用戶fiona默認看到的是finance的schema,那麼能夠這樣操做。 服務器
01 |
zhangnq=# alter role fiona set search_path ='finance' ; |
03 |
zhangnq=# revoke all on SCHEMA finance from public ; |
05 |
zhangnq=# grant all on SCHEMA finance to fiona ; |
08 |
postgres@yunwei :~$ psql zhangnq -U fiona |
09 |
Password for user fiona: |
13 |
zhangnq=> select current_schema ; |
由於public沒有被定義,因此fiona用戶也就看不到public,fiona新建的表也都會默認進入到finance schema。 app
11、給予用戶私有的數據庫(Giving users their own private database)
具體例子以下:
首先建立好zhangnq帳號和zhangnq數據庫。 post
05 |
postgres=# alter database zhangnq owner to zhangnq ; //把zhangnq數據庫全部人變成zhangnq |
09 |
postgres=# revoke CONNECT on DATABASE zhangnq from public ; //去除鏈接zhangnq |
11 |
postgres=# grant CONNECT on DATABASE zhangnq to zhangnq ; //給予zhangnq訪問zhangnq的權限 |
16 |
postgres@yunwei :~$ psql zhangnq -U fiona //使用fiona用戶登陸zhangnq數據庫,提示沒有權限 |
17 |
Password for user fiona: |
18 |
psql.bin: FATAL: permission denied for database "zhangnq" |
19 |
DETAIL: User does not have CONNECT privilege. |
12、在一個系統中運行多個postgresql服務(Running multiple servers on one system)
一些安裝版本在安裝postgresql的時候默認把數據放在data的目錄下。
在Debian/Ubuntu平臺,添加額外的數據目錄。
sudo pg_createcluster 9.0 database2
這個命令會添加一個9.0版本database2的數據庫,放在/var/lib/postgresql/9.0/database2目錄。
在Red Hat平臺,你能夠直接運行initdb,而後在postgresql.conf配置文件中修改端口參數。
initdb -D /var/lib/pgsql/database2
pg_ctl -D /var/lib/pgsql/database2 start
(這一節我沒有測試經過) 測試
十3、創建一個鏈接池(Set up a Connection Pool)
鏈接池是把鏈接的會話收集的一個術語,用來減少鏈接和從新鏈接的開銷。pgbouncer是一個輕量級的鏈接池程序。
具體配置能夠參考以前的這篇文章《Ubuntu服務器中PgBouncer的安裝》 。 spa