PostgreSQL Вставить в 2 таблицы? - PullRequest
0 голосов
/ 05 июля 2018

Работая с сервером nodejs, я подумал, что вместо того, чтобы делать 2 вызова метода, для каждой отдельной функции я бы вызвал один запрос, чтобы добавить 2 в базу данных. Я искал abit при переполнении стека для некоторых вопросов, касающихся этого, однако они, кажется, не работают.

Мой пример будет таким: на этапе регистрации пользователь вставляется в базу данных, а затем добавляется таблица субпользователя с именем user_settings с реляционным ключом для идентификатора пользователя созданного пользователя.

Один пример, который я пробовал, но не работал, таков:

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, когда я пытаюсь вставить его в качестве запроса.

1 Ответ

0 голосов
/ 05 июля 2018

В вашем 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;
...