GaussDB 分库的默认模式的踩坑

GaussDB 分库中默认模式的坑

项目重构,数据源由mysql转为GaussDB,且项目是分库的。测试使用同名schema,没注意,结果上线踩了坑。

GaussDB 的树结构是【数据库实例】->【数据库】->【模式】->【表】。数据库实例有多个库,一个库下有多个模式:test1,test2,test3,test4。一个模式下多个表。对于同一个账户访问同一个数据库实例的多个库,是共同使用一个默认模式的。初始默认模式为public

踩坑场景:每个库创建并使用不同名字的模式

应用A,分库后为ig1,ig2,ig3,ig4,ig5 ,ig6 共6个库,其中ig1,ig2,ig3在同一个数据库实例gauss1。ig4,ig5 ,ig6在同一个数据库实例gauss2,每个数据库实例都创建账户manager,使用账户manager登录访问。
库ig1 创建ig_db1模式,库ig2 创建ig_db2模式,其他库依次相仿。
此时通过下列命令,分别在相应的库中执行设置各自默认模式

alter role manager set search_path to ig_db1;
alter role manager set search_path to ig_db2;
alter role manager set search_path to ig_db3;
alter role manager set search_path to ig_db4;
alter role manager set search_path to ig_db5;
alter role manager set search_path to ig_db6;

分别执行查看默认模式命令

show search_path;

结果发现:之前的库ig1,ig2,ig4,ig5默认模式不是执行的命令设置的对应schema。
库ig1,ig2变成了最后执行的ig_db3。而库ig4,ig5变成了最后执行的ig_db6

原因

alter role manager set search_path to xx_schema 命令是对账户设置的默认模式,数据库实例中所有该账户登录的库都使用同一个默认模式。

解决

分库模式下,同一个实例的库使用同一个账号访问时,创建同名的schema模式,并设置默认访问
数据库实例gauss1:库ig1【创建模式:ig_schema】,库ig2【创建模式:ig_schema】,库ig3【创建模式:ig_schema】。
数据库实例gauss2:库ig4【创建模式:ig_schema】,库ig5【创建模式:ig_schema】,库ig6【创建模式:ig_schema】。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值