You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spanner行删除策略:标记删除后更新行的行为及测试方法

Google Cloud Spanner 行删除策略行为与开发环境复现

一、标记待删除后更新的行为

当某行被标记为待删除(满足你定义的DELETE_AFTER条件)后,若对该行执行更新操作:

  • 后台删除进程会重新校验该行的过期时间戳(即用于判断删除触发的字段值)。
  • 更新操作会刷新关联的时间字段(比如你设置的created_at或直接指定的过期时间列),只要当前时间未超过更新后的过期时间,进程就会判定该行不再满足删除条件,停止执行删除操作。
  • 直白点说:更新会让行“脱离待删除状态”,不会被后台删掉。

二、开发环境快速复现的方法

默认删除进程最长72小时触发,在开发环境可以用Spanner模拟器跳过等待,手动触发删除任务,步骤如下:

  1. 启动Spanner模拟器:
    gcloud emulators spanner start
    
  2. 配置环境变量指向模拟器:
    $(gcloud emulators spanner env-init)
    
  3. 创建带行删除策略的表:
    示例表设置1分钟后自动删除:
    CREATE TABLE TestTable (
      id STRING(36) PRIMARY KEY,
      created_at TIMESTAMP NOT NULL
    ) OPTIONS (
      row_deletion_policy = 'DELETE_AFTER(created_at, INTERVAL 1 MINUTE)'
    );
    
  4. 插入测试数据:
    INSERT INTO TestTable (id, created_at) VALUES ('test-id', CURRENT_TIMESTAMP());
    
  5. 等待1分钟让行进入待删除状态,然后更新该行的created_at字段,将过期时间往后推:
    UPDATE TestTable SET created_at = TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) WHERE id = 'test-id';
    
  6. 手动触发删除任务:
    gcloud spanner databases trigger-row-deletion --instance=test-instance --database=test-db
    
  7. 查询验证:执行SELECT * FROM TestTable WHERE id = 'test-id';,会发现该行仍然存在,说明更新后删除进程停止了操作。

内容的提问来源于stack exchange,提问作者Spanner_newbie_314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:58:56