[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と日時の取得をひとつのクエリで実施できる。

参考

コメント

このブログの人気の投稿

Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER is marked for publish/export but is not exported on the project classpath

[node.js] CP932のテキストを読み込む

[Java] WebDAVからファイルをダウンロード