执行 PostgreSQL 中的 DDL 后元数据未刷新 交易
□ 错误报告 在去除PostgreSQL在ShardingSphere(''org.apache.shardingspere.proxy.backend.connector.ProxySQLExecutor#checkExecutePrerequisites')中执行DDL的限制后,观察到了以下问题:
当修改元数据的 DDL 语句(如 ALTER t1 ACD COLUMN c1 INT)在交易中执行时,刷新元数据操作使用新的物理连接. 由于交易尚未承诺,DDL的元数据变化不明显,导致刷新元数据失败(如未检测出新列).
你用的是哪个版本的ShardingSphere? 师曰.
你用的是哪个项目? 硬盘-JDBC还是硬盘-Proxy? 硬圈- Proxy
预期行为 在PostgreSQL交易中执行DDL后,ShardingSphere中的元数据信息应当与PostgreSQL上的表格结构一致.
实际行为 DDL在交易中执行成功,但相应的元数据在ShardingSphere上没有被成功刷新.
理由分析(如果可以) 跟踪 PostgreSQL 交易中涉及元数据变化 DDL 操作的所有表格名称 。 延迟元数据在交易完成前刷新,然后对受影响的表格进行统一的元数据刷新。
QQ 复制行为的步骤, 如: SQL 要执行, 硬化规则配置, 当例外发生时等.
- 开始PostgreSQL交易。
- 在交易中执行 DDL 语句(例如,替代表t1 ADD COLUMN c1 INT)。
- 在进行交易后,再次查询元数据,并观察到新栏未刷新. 预期行为 元数据应在交易承诺后自动刷新,以确保更改(如新列)生效.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
PostgreSQL试验方案
开始; 比利时
在交易中执行DDL。
ShardingSphere元数据刷新使用新连接,因此无法看到未承诺的计划变化 sharding db=> 更改表 t 顺序后添加一栏 t1英寸; 备选表格 执行; 承诺
-- t1栏未自动刷新 从 t 顺序中选择 *; 命令 id 用户 id 状态 创建 日期 QQ ------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------- (行数为0)
-- 加载t1列所需的手动元数据刷新 正在刷新表格元数据 t 顺序; 失败 从 t 顺序中选择 *; 命令 id 用户 id QQ状态 创建 日期 t1 QQ -------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------- (行数为0)
· 复制这个问题的实例代码(例如GitHub链接).内容来源: apache/shardingsphere