[PostgreSQL] serial型のidで採番された値を取得する
やりたいこと
- Node.js (express)
- REST API
- PostgreSQL
上記の環境で、PostgreSQLにINSERTした際にidで採番された値を取得し、REST APIのレスポンスに含めたい。
実装
PostgreSQLでは RETURNING
を使うとINSERT, UPDATE, DELETE で SELECT文のようにデータを返す事ができる。
めっちゃ便利。
// POST: /api/user
router.post("/user", (req, res, next) => {
// パラメータの組み立て & パスワードのハッシュ化
const params = Object.assign({}, req.body);
// ~~ 省略 ~~
// idはserial (自動採番)、insert後に採番したidを返す
const query = `insert into users (
name, mail, password
) values (
\${name}, \${mail}, \${password}
) returning id`;
db.one(query, params)
.then((data) => {
console.log(data);
// idをセット
const id = data.id;
res.status(201).json({
status: "created",
message: `http://localhost:${port}/api/user/${id}`
});
})
.catch((err) => {
return next(err);
});
});
id以外の列も当然返せる。
更新日時なんかも返せるので、セッションテーブルのUPDATEと日時の取得をひとつのクエリで実施できる。
コメント
コメントを投稿