小编Rou*_*ouz的帖子

如果稍后查询失败,WITH 会发生什么

我绝不是数据库专家,所以我可能会问一些愚蠢的问题。

所以我正在使用 PostgreSQL,我想对一个表进行插入,保留 ID(ID 自动递增)并将一个元组插入另一个表(元组中有该 ID)。

显然我想让事情保持原子性。

询问:

WITH inserted AS (
  INSERT INTO
    "public"."user" (email, first_name, last_name, username)
  VALUES
    (?, ?, ?, ?)
  RETURNING id
)
INSERT INTO 
  "public"."security" (user_id, security)
VALUES((
  SELECT id FROM inserted
), ?);
Run Code Online (Sandbox Code Playgroud)

问题是,这甚至可以工作吗?如果第二次插入失败会发生什么?第一个会坚持下去吗?

显而易见的答案是,我可能会将其放入事务并提交/回滚,但这是否足够?

postgresql cte transaction

4
推荐指数
1
解决办法
485
查看次数

标签 统计

cte ×1

postgresql ×1

transaction ×1