以前文章介绍了控制解析一(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