postgressql 的 returning 关键字实现逻辑是怎样?

2021-01-29 11:26:01 +08:00
 leeraya

官网的 Synopsis:

[ WITH [ RECURSIVE ] with_query [, ...] ] DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ USING from_item [, ...] ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

returning 子句可以返回删除数据结果集。 那么它的底层逻辑是怎么样实现的呢,主要是 delete rows 和 table reader 的过程先后不太能搞清楚。

993 次点击
所在节点    数据库
1 条回复
JimmyChange
2021-01-29 20:09:59 +08:00
肯定是先读取磁盘数据到内存,而且 PostgreSQL 的 MVCC 默认是不会实时的删除数据的,只是更新数据记录 cmax 和 cmin 的值,可以理解为每个数据库事务都会有一个递增的 ID,删除的时候更新记录,表明这条数据在被第 N 个事务删除,所有 ID 大于 N 的事务都看不到了,真实的删除操作实在 Vacuum 过程中进行的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749483

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX