Postgresql數據庫控制解析(二)

以前文章介紹了控制解析一(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
6 (2 rows)

查詢到有兩個客戶端連着着數據庫,一個是psql,一個是pgadmin。強制pgadmin用戶下線的命令以下: 數據庫

1 forummon=# select pg_terminate_backend(10509) ;
2  pg_terminate_backend
3 ----------------------
4  t
5 (1 row)

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' ;
02 ALTER ROLE
03 zhangnq=# revoke all on SCHEMA finance from public ;
04 REVOKE
05 zhangnq=# grant all on SCHEMA finance to fiona ;
06 GRANT
07  
08 postgres@yunwei :~$ psql zhangnq -U fiona
09 Password for user fiona:
10 psql.bin (9.3.0)
11 Type "help" for help.
12  
13 zhangnq=> select current_schema ;
14  current_schema
15 ----------------
16  finance
17 (1 row)

由於public沒有被定義,因此fiona用戶也就看不到public,fiona新建的表也都會默認進入到finance schema。 app

11、給予用戶私有的數據庫(Giving users their own private database)
具體例子以下:
首先建立好zhangnq帳號和zhangnq數據庫。 post

01 postgres@yunwei :~$ psql
02 psql.bin (9.3.0)
03 Type "help" for help.
04  
05 postgres=# alter database zhangnq owner to zhangnq ; //把zhangnq數據庫全部人變成zhangnq
06 ALTER DATABASE
07 postgres=# begin;
08 BEGIN
09 postgres=# revoke CONNECT on DATABASE zhangnq from public ; //去除鏈接zhangnq
10 REVOKE
11 postgres=# grant CONNECT on DATABASE zhangnq to zhangnq ; //給予zhangnq訪問zhangnq的權限
12 GRANT
13 postgres=# commit ;
14 COMMIT
15 postgres=# \q
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

相關文章
相關標籤/搜索