在 YugabyteDB 的事务中使用多个 DDL

问题描述

有没有人知道我无法在同一事务中截断和插入之间交替的原因(特定于 yugabyte 或其他原因)?

这些步骤:

  1. 截断表格。
  2. 在该表中插入一行。
  3. 再次截断。
  4. 在表格中插入另一行。

在最后一步导致此错误

ERROR: Operation Failed. Try again.: UnkNown transaction,Could be recently aborted: e415ae05-0d46-42f5-b18d-f27b344b5642 (sqlSTATE 40001)

[免责声明]:这个问题最初是在 YugabyteDB 社区 Slack 频道上提出的。

解决方法

在 YugabyteDB 中,当前 'truncate' 不是事务性的。建议避免使用:

a) 在多步事务中截断

b) 在同一个表上与我们的读/写操作同时运行 truncate。

据我所知,其他分布式 SQL 数据库也有:

a) 不支持截断(如 Google Cloud Spanner)。见Does Cloud Spanner support a TRUNCATE TABLE command?

或,

b) 它们支持截断,但不支持事务方式。

我们确实计划在将来限制此限制。近期可能

delete from T;

可以用作解决方法;这比使用 truncate 重一点,但会是事务性的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...