PG 数据库只读用户的建立。

我们在oracle数据库下面建立只读用户是很方便的,建用户,授权,建立同义词 搞定

pg 下面是不能建立同义词的,用视图代替? 


其实不用,有更简单的方法: 

1) 建立只读用户
 create  user  user_reader  password 'user_reader' ; 

  指定只读用户的搜索路径

  alter user user_reader  set search_path=‘user’; 

2) 授权: 

postgres 用户登录的需要授权的数据库

grant select on all tables in schema schema—user  to user_reader ; 

3)  修改 pg_hba.conf  允许登录 ,并重载配置文件

4) 用只读用户登录数据库,直接执行select  * from table  就可以了。

5) 如果不说第5步,你肯定是要回来找我的。 

    在第2步授权的地方,只授对表的访问权限是不行的,还要授个对schema 的访问权限。 

   grant  usage on schema schema_user  to user_reader; 


嗯,  现在可以正常访问了。搞定。 

不过有跟oracle 应该有相同的缺陷,如果新增的表,是无法访问的,

需要重新执行

grant select on all tables in schema schema—user  to user_reader ; 
  这句,或者针对单独的表的授权。 



过以后 要做到新增加的 table 自动对只读用户授权 ,那么下面这句就比较重要了。



alter default privileges in schema schema_name grant select on tables to schema_reader; 



这条sql 的执行, 需要用 table 的ower 去执行,而不是超级用户来执行。 否则用只读用户去查询,会报权限不足,无法查询。 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-2200211/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/133735/viewspace-2200211/

### 设置和配置 PostgreSQL 数据库中的读写分离 #### 配置主从复制环境 为了在 PostgreSQL 中实现读写分离,首先需要建立一个稳定的主从复制环境。这涉及到创建至少一台主服务器(用于写操作)和若干台只读副本服务器(用于读取)。确保所有节点之间的网络连接稳定可靠,并且版本兼容性良好[^1]。 ```sql -- 主服务器上启用流复制功能并重启服务 ALTER SYSTEM SET wal_level = 'replica'; SELECT pg_reload_conf(); ``` #### 创建物理或逻辑复制槽位 根据需求选择合适的复制方式——物理还是逻辑复制。这里以最常用的物理复制为例: - 物理复制通过文件级同步来保持数据一致性; - 逻辑复制则允许更灵活的数据传输模式,适合特定场景下的应用层定制化开发。 ```bash # 在主服务器上执行命令创建新的复制槽位 pg_create_physical_replication_slot 'my_slot_name' ``` #### 复制初始化与持续更新 完成上述准备工作之后,在备机端利用 `pg_basebackup` 工具获取最新的全量备份快照作为初始状态;随后启动WAL日志重放机制维持后续增量变化的一致性传播。 ```bash # 执行基础备份并将结果恢复到目标位置 pg_basebackup -D /path/to/standby/data/directory \ -h primary_host_ip_address \ -U replication_user \ -v \ -P \ --write-recovery-conf \ --slot=my_slot_name ``` #### 应用层面的读写路由策略实施 当硬件设施搭建完毕后,接下来就是在应用程序内部集成相应的中间件组件负责具体的请求分发工作。例如采用 Sharding-JDBC 这样的解决方案能够很好地适配多种类型的数据库产品及其周边生态工具链,从而简化了跨平台移植过程中的复杂度降低迁移门槛[^2]。 对于 Java 开发者而言,可以通过如下代码片段展示如何借助该框架快速构建起一套简易版的读写分离方案: ```java // 定义DataSource对象数组分别指向不同的实例地址 List<DataSource> dataSources = Arrays.asList( DataSourceBuilder.create().url("jdbc:postgresql://master-db-url").build(), DataSourceBuilder.create().url("jdbc:postgresql://slave-db-url").build() ); // 构建ShardingSphereDataSource实例指定负载均衡算法及权重分配比例等参数选项 Properties props = new Properties(); props.setProperty("sharding.read.query.load.balance.algorithm.type", "round_robin"); new ShardingSphereDataSource(new StandardShardingStrategyConfiguration(), props); ``` #### 关系模型优化建议 最后值得注意的是,在规划整个系统的架构之初就应该充分考虑到各个实体间可能存在的关联形式,比如一对一、一对多乃至更为复杂的多对多映射关系等等。合理的表结构设计不仅有助于提高查询效率减少锁竞争现象的发生频率,同时也便于后期运维人员进行性能调优诊断问题所在之处[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值