How to insert two table in one time?
I need to insert second table user_information
the field user_id
with first table user
insert returning id
, I found this answer but I can’t find how to be with params prepared statements
var dbQuery = 'WITH insertUser AS ( INSERT INTO "user" (status, create_date) VALUES ($1, $2) RETURNING id ) , insertUserInformation AS ( INSERT INTO user_information (user_id, email) VALUES ($3, $4) ) '; yield queryPromise(dbClient, dbQuery, [status, timestamp, ??, email]);
Advertisement
Answer
Use transactions. That way either all queries will be committed, or none will be committed. And the incomplete state before you have executed all queries is not visible for other processes.
More on how to do transactions in node-postgres
is available at https://github.com/brianc/node-postgres/wiki/Transactions
And for reference the most relevant section is:
var Client = require('pg').Client; var client = new Client(/*your connection info goes here*/); client.connect(); var rollback = function(client) { //terminating a client connection will //automatically rollback any uncommitted transactions //so while it's not technically mandatory to call //ROLLBACK it is cleaner and more correct client.query('ROLLBACK', function() { client.end(); }); }; client.query('BEGIN', function(err, result) { if(err) return rollback(client); client.query('INSERT INTO account(money) VALUES(100) WHERE id = $1', [1], function(err, result) { if(err) return rollback(client); client.query('INSERT INTO account(money) VALUES(-100) WHERE id = $1', [2], function(err, result) { if(err) return rollback(client); //disconnect after successful commit client.query('COMMIT', client.end.bind(client)); }); }); });