在 YugabyteDB 的事务中使用多个 DDL

Using multiple DDLs within a transaction in YugabyteDB

有谁知道我不能在同一个事务中交替截断和插入的原因(特定于 yugabyte 或其他原因)?

这些步骤:

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

在最后一步导致此错误:

ERROR: Operation failed. Try again.: Unknown transaction, could be recently aborted: e415ae05-0d46-42f5-b18d-f27b344b5642 (SQLSTATE 40001)

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

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

a) 在多步事务中截断

b) 运行 与我们对相同 table 的 read/write 操作同时截断。

据我所知,其他分布式 SQL 数据库也可以是:

a) 不支持截断(如 Google Cloud Spanner)。参见

或者,

b) 他们支持截断,但不支持事务处理方式。

我们确实计划在未来限制此限制。短期内可能

delete from T;

可以用作解决方法;这比使用截断更重一些,但将是事务性的。