删除事务中的所有行:其他事务会发生什么?

mah*_*nya 6 delete transaction functions voltdb

我目前在 PostgreSQL 中有一个函数,它创建一个临时表,填充它,执行一些棘手的选择并返回结果。postgresql 的临时表是函数的本地表,因此这有助于我避免在临时表中引入另一列来标记由函数的特定执行插入的所有行。如果我使用了一个需要的全局表,并且由于我的查询的性质,它会降低性能。

我想将这段代码移植到 VoltDB,但它不支持从存储过程创建临时表。这让我想到了其他方法。如果存储过程将启动一个事务并删除表中的所有行(不是临时表),那么此时运行的同一存储过程的其他执行会发生什么情况?

或者如果在删除之后,存储过程开始插入行,而另一个会话调用相同的 sp,它将再次删除所有行,那怎么办?

简而言之,我可以通过删除所有行,插入一些行,然后对插入的行执行查询,然后在 sp 执行结束(和事务提交)之前再次删除所有行来创建事务中数据的本地(对 sp 执行)视图吗? )?

这将让我避免为临时行使用 rowset_id 列,避免更慢的连接(这是一个 EAV 实现)。

mah*_*nya 3

a_horse_with_no_name的评论实际上是答案,但由于它没有作为答案发布,所以我无法将其标记为如此。我完全忘记了事务隔离级别,我在 VoltDB 论坛中提出了这个问题,看来只要确保存储过程是节点本地的(抱歉,这有点像 VoltDB 术语),那就是,他们不会跨分区表处理数据,这应该可行。