首页 > 解决方案 > PostgreSQL 插入 2 个表?

问题描述

使用 nodejs 服务器,我认为不必对每个单独的函数进行 2 个方法调用,而是调用一个查询将 2 添加到数据库中。我已经在堆栈溢出上搜索了一些关于此的问题,但是它们似乎不起作用。

我的示例是,在注册阶段,将用户插入数据库,然后将名为 user_settings 的子用户表添加到创建用户的用户 ID 的关系键。

我试过但没有奏效的一个例子是:

WITH ins1 AS (
   INSERT INTO users(firstname, lastname)
   VALUES ('foo', 'bar')
   RETURNING id AS user_id
   )
, ins2 AS (
   INSERT INTO user_settings(user_id, adddetails)
   SELECT user_id, 'foobar' FROM ins1
   )

当我尝试将其作为查询放入时,它似乎不知道返回的 user_id。

标签: postgresqlsql-insertpostgresql-9.5

解决方案


您的 CTE 缺少最终陈述。第二个插入应该在 CTE 定义“之外”:

WITH ins1 AS (
   INSERT INTO users(firstname, lastname)
   VALUES ('foo', 'bar')
   RETURNING id AS user_id
)
INSERT INTO user_settings(user_id, adddetails, "timestamp")
SELECT user_id, 'foobar', current_timetamp
FROM ins1;

推荐阅读