1 回答

TA贡献1848条经验 获得超10个赞
SQL 标准定义了一个附加级别,READ UNCOMMITTED。在 PostgreSQL 中,READ UNCOMMITTED 被视为 READ COMMITTED。
因此,您所看到的似乎是意料之中的(但是,由于您没有提供太多关于sp()
难以评论的信息 - 提供一个最小的、可重现的示例可能会产生更好的答案)。
请注意,您有一个错字tx.Exec("CAL sp()")
- 检查从各种数据库调用返回的错误将改进此测试用例。
更新后的附加信息:
tx.ExecContext(ctx, "CALL sp(`john`, 20)")
应该是err = tx.ExecContext(ctx, "CALL sp(`john`, 20)")
(否则您正在检查 begin transaction 返回的错误 - 最好同时检查)。
您可以通过在进行第二次更新之前设置一个短暂的超时(比如一秒 - 类似tx.ExecContext(ctx, "SET statement_timeout = 1000)
)来执行测试,然后检查调用是否失败。这将起作用,因为第一个事务将保持锁定,直到第二个事务被提交/回滚。
每次测试后有没有一种简单的方法来清理数据库?
这取决于您的要求;在这种情况下,回滚事务将删除您的测试数据。截断工作正常,但通常你会希望保留一些测试数据,所以它并不理想。我通常恢复备份或使用 docker 容器(作为构建的一部分恢复的数据)。
- 1 回答
- 0 关注
- 207 浏览
添加回答
举报