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
相关文章
相关标签/搜索