PostgreSQL 只读模式 , hot standby recovery 模式
2017-11-28 15:39
591 查看
背景
有些时候,我们可能需要将数据库变成只读模式,或者提供一些只读账号。比如需要给开发人员一些自由查询功能的账号,或者当数据库用了多少空间后,将其锁定为只读模式。
让数据库进入只读有几种方法,
弱只读的方法,设置默认事务为只读,这种方法只能实现弱只读,因为用户可以在会话中改成写模式。
进入recovery模式,并开启hot_standby。
如果要让某个用户只读,建议使用权限控制的方法,比如只赋予select的权限,同时使用事件触发器,规避掉 CREATE, 等DDL操作。
弱只读设置方法
让数据库变成只读模式,目前PostgreSQL没有严格意义上的只读模式(如临时表在只读事务中还是可以使用的)。通过调整参数或设置事务模式可以将后续登录的SESSION或者当前事务设置为只读模式。
在只读模式下, PostgreSQL不允许如下SQL:
When a transaction is read-only, the following SQL commands are disallowed:
INSERT, UPDATE, DELETE, and COPY FROM if the table they would write to is not a temporary table;
all CREATE, ALTER, and DROP commands;
COMMENT, GRANT, REVOKE, TRUNCATE;
and EXPLAIN ANALYZE and EXECUTE if the command they would execute is among those listed.
This is a high-level notion of read-only that does not prevent all writes to disk.
在SQL模式下进入只读事务的方法:
digoal=> begin;
BEGIN
digoal=> set transaction read only;
SET
参数配置 :
default_transaction_read_only = on
配置完后pg_ctl reload -D $PGDATA
配置完参数后,不影响已经连接的SESSION,仅仅对后续连接上来的SESSION生效。新建的SESSION进来后事务就是read only模式。
digoal=> show default_transaction_read_only
digoal-> ;
default_transaction_read_only
on
digoal=> delete from tbl_test;
ERROR: cannot execute DELETE in a read-only transaction
可以设置事务级WRITE覆盖这个默认值
digoal=> begin;
BEGIN
digoal=> set transaction read write;
SET
digoal=> delete from tbl_test;
DELETE 1008
或者设置SESSION级参数,覆盖之
digoal=> set session default_transaction_read_only=off;
SET
digoal=> delete from tbl_test;
DELETE 1008
强只读设置方法
PostgreSQL进入强只读的方法很简单,创建recovery.conf文件,并打开hot_standby模式。重启即可。Oracle进入只读模式可以在启动数据库时通过startup mount ; alter database open read only ;
ORACLE进入只读模式后要回到读写模式需要重启数据库,原因是数据库智能OPEN一次。
Oracle还有两个不需要重启数据库也进入到只读模式的命令如:
alter system SUSPEND | RESUME
alter system QUIESCE RESTRICTED and UNQUIESCE
具体的细节可以参考ORACLE官方文档。
只读用户
只读用户的设置也很简单,对于需要访问的表或者SCHEMA,设置只读权限。同时使用事件触发器规避DDL
相关文章推荐
- postgresql集群方案hot standby 安装和测试
- postgresql集群方案hot standby 安装和测试
- postgresql集群方案hot standby初级测试(一)——模拟集群状况
- postgresql集群方案hot standby初级测试(三)——蛋疼测试——手动同步数据
- postgresql集群方案hot standby初级测试(五)——xlog详细解释record
- postgresql集群方案hot standby初级测试(一)——模拟集群状况
- postgreSQL hot stand by
- postgresql异步流复制Hot Standby
- postgresql在windows7环境下的热备hot standby
- postgresql同步流复制的Hot Standby
- postgresql数据库异步流复制hot standby环境搭建
- PostgreSQL HOT STANDBY using log shipping
- PostgreSQL Hot Standby
- postgresql在windows 环境下的热备hot standby
- cisco Hot Standby Router Protocol
- ORA-10456: cannot open standby database; media recovery session may be in progress
- ORA-10458: standby database requires recovery
- ORA-10456: cannot open standby database; media recovery session may be in progress
- HSRP, Hot Standby Router Protocol
- Primary & Standby with 2 HOST HA for PostgreSQL (auto failover failback)