Oracle迁移至Aurora Postgres时读写状态校验等效查询方案问询
原生PostgreSQL等效查询方案
原生PostgreSQL可通过系统函数判断节点是否可写入,逻辑和你原Oracle PL/SQL的需求完全匹配:
- 核心判断函数为
pg_is_in_recovery():
返回值说明:SELECT pg_is_in_recovery();- 返回
f/false:节点为主节点,默认支持写入操作 - 返回
t/true:节点为备节点,默认处于只读状态
- 返回
- 若需额外校验数据库全局读写配置,可叠加查询参数:
返回SHOW default_transaction_read_only;off即为默认允许写入,返回on即为全局默认只读。
对应PL/pgSQL的判断逻辑示例:
DECLARE v_is_readonly boolean; BEGIN SELECT pg_is_in_recovery() INTO v_is_readonly; IF NOT v_is_readonly AND current_setting('default_transaction_read_only') = 'off' THEN -- 执行需要写入权限的业务逻辑 END IF; END;
Aurora PostgreSQL原生专属查询方案
Aurora PostgreSQL提供专属的系统函数和视图,可直接区分读写节点:
- 最简判断函数(Aurora PostgreSQL 10及以上版本支持):
返回SELECT pg_is_primary();t即为写节点(主实例),返回f即为读节点(只读副本)。 - 兼容所有Aurora PostgreSQL版本的查询方案:
返回值大于0即为写节点,等于0即为读节点。SELECT count(*) FROM aurora_replica_status() WHERE session_id = 'MASTER_SESSION_ID';
内容的提问来源于stack exchange,提问作者Harmeet Singh
相关产品推荐
相关产品推荐

