V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leeraya
V2EX  ›  数据库

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

  •  
  •   leeraya · 2021-01-29 11:26:01 +08:00 · 887 次点击
    这是一个创建于 1155 天前的主题,其中的信息可能已经有所发展或是发生改变。

    官网的 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 的过程先后不太能搞清楚。

    1 条回复    2021-01-29 20:09:59 +08:00
    JimmyChange
        1
    JimmyChange  
       2021-01-29 20:09:59 +08:00
    肯定是先读取磁盘数据到内存,而且 PostgreSQL 的 MVCC 默认是不会实时的删除数据的,只是更新数据记录 cmax 和 cmin 的值,可以理解为每个数据库事务都会有一个递增的 ID,删除的时候更新记录,表明这条数据在被第 N 个事务删除,所有 ID 大于 N 的事务都看不到了,真实的删除操作实在 Vacuum 过程中进行的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2877 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:32 · PVG 19:32 · LAX 04:32 · JFK 07:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.