【Node.js入門】PostgreSQLに接続してデータを操作するためのチュートリアル!

今回は、Node.jsからPostgreSQLのデータベースに接続してデータを操作するための手法について学習していきましょう!

「PostgreSQLってどんなデータベースなの?」
「Node.jsからデータベースを操作する方法を知りたい」
「PostgreSQLのクエリを操作する手法を学びたい」

このような内容も含めて、本記事では以下のような構成で解説していきます!

【基礎】「PostgreSQL」とは?
【基礎】「PostgreSQL」の使い方
【実践】Node.jsからクエリを操作する方法
【まとめ】PostgreSQLの使い方まとめ

この記事で、PostgreSQLをしっかり学習してスキルアップを目指していきましょう!

>>> 今すぐ「PostgreSQLの使い方」を知りたい方はこちら

目次

「PostgreSQL」とは?

PostgreSQLは、オープンソースで開発・公開されているデータベースの名称であり、リレーショナルデータベースの代表的な製品とも言えます。
(オブジェクトリレーショナルデータベースとも言われます)

Webシステムでもよく使われるデータベースとして「MySQL」もありますが、PostgreSQLも同じように利用できてさらに多機能でもあるのが特徴でしょう。

MySQLについては次の記事で詳しくまとめているので合わせて参考にしてみてください。

PostgreSQLは主にUNIX環境で使われていますが、一般的なWindows / Mac OS X / Linuxなどでも同様に使えます。

Node.jsによるPostgreSQLの使い方

この章では、Node.jsからPostgreSQLを操作するための導入方法について見ていきましょう!

主に、モジュールの追加やPostgreSQLへの接続方法について学んでいきます。

node-postgresモジュールの導入

まずは、Node.jsからPostgreSQLを扱うためのモジュールの導入方法から見ていきましょう!

一般的にPostgreSQLを扱うには「node-postgres」モジュールを使うので、次のようにコマンドを実行してインストールします。

$ npm install pg

インストールできたら、Node.jsから扱えるようにrequire()を記述しておきましょう!

var { Client } = require('pg');

これで、Node.jsからPostgreSQLを扱うための準備が完了しました。

Node.jsからPostgreSQLに接続する方法

それでは、Node.jsからPostgreSQLのデータベースに接続する方法を見ていきましょう!

必要な情報としては次の通りです。

・ユーザー名
・データベースアドレス(ホスト)
・データベース名
・パスワード
・ポート番号

いずれの情報もPostgreSQLを使ってデータベースを設定する時に作るものなので、忘れずにメモをしておきましょう。

これらの情報を元に次のような記述を行うことでNode.jsからPostgreSQLに接続することができます。

var client = new Client({
    user: 'myuser',
    host: 'database.server.com',
    database: 'mydata',
    password: 'abc123',
    port: 5432
})

client.connect()

Client()のインスタンスを作成する際に、初期設定としてオプションにデータベースと接続するための必要な情報を指定します。

以降は「client」を使ってさまざまなデータベース操作を行うので、「connect()」メソッドを実行するのを忘れないようにしましょう!

PostgreSQLのクエリ操作

この章では、データベースを操作するためのクエリを実行する方法について見ていきましょう!

主に、コールバック関数・Promiseを活用した実行方法について学んでいきます。

今回利用するクエリは次のようにオブジェクト形式にしておくと扱いやすいでしょう。

const query = {
    text: 'INSERT INTO users(name, email) VALUES($1, $2)',
    values: ['太郎', 'mytest@samplel.com'],
}

この例では、ユーザー情報を新規にデータベースへ追加しています。

このクエリを使って、次の章からプログラミング手法を見ていきましょう!

callbackによるクエリ操作

まずは、最も定番とも言えるコールバック関数を使ったクエリ操作について見ていきましょう!

「query()」の引数へオブジェクトに格納したクエリ操作と関数を設定していきます。

client.query(query, (err, res) => {
    if (err) {

        console.log(err.stack)

    } else {

        console.log(res.rows[0])

    }
})

第1引数にクエリオブジェクトを設定し、第2引数にコールバック関数を設定しています。

関数内の処理としては、クエリ操作に失敗した時と正常に実行された時の処理を条件分岐しています。

クエリが正常に動作すると、オブジェクトに格納されたユーザー名とメールアドレスが出力されます。

Promiseによるクエリ操作

次に、シンプルな記述が可能なPromiseを使ったクエリ操作について見ていきましょう!

Promiseの特徴である「then()」「catch()」による記述が可能なので、コードの見通しが良くなり処理の連結もしやすいです。

次のサンプル例を見てください!

client.query(query)
  .then(res => console.log(res.rows[0]))
  .catch(e => console.error(e.stack))

コールバック関数を使ったコードよりもずっとシンプルになったのが分かるでしょうか?

何らかのエラーが発生した場合には自動的に「catch()」の処理が実行され、通常は「then()」の処理が実行されるようになります。

PostgreSQLの使い方まとめ

最後に、Node.jsからPostgreSQLを操作するための手法についてまとめておきます!

まずは、Node.jsからPostgreSQLのデータベースを扱うために「node-progres」モジュールを使えるようにrequire()しておきます。

var { Client } = require('pg');

データベースを操作するために必要な情報をClient()の引数に初期設定として指定します。

var client = new Client({
    user: 'myuser',
    host: 'database.server.com',
    database: 'mydata',
    password: 'abc123',
    port: 5432
})

client.connect()

そして、利用したいクエリ操作を次のようにオブジェクト形式に格納しておくと便利です。

const query = {
    text: 'INSERT INTO users(name, email) VALUES($1, $2)',
    values: ['太郎', 'mytest@samplel.com'],
}

このクエリをNode.jsから利用するには、query()メソッドにオブジェクトを指定すればOKです。

client.query(query)
  .then(res => console.log(res.rows[0]))
  .catch(e => console.error(e.stack))

Promiseによるシンプルな記述が可能で、何らかのエラーが発生した場合にはcatch()が自動的に実行されます。

まとめ

今回は、Node.jsからPostgreSQLデータベースに接続して操作するための手法について学習しました!

最後に、もう一度ポイントをおさらいしておきましょう!

・Node.jsからPostgreSQLを操作するには「node-postgres」モジュールを導入する
・データベース情報をClient()の引数に初期設定として指定する必要がある
・クエリ操作としてはコールバック関数かPromiseによる記述がある

上記内容を踏まえて、ぜひ自分でもプログラミングに取り入れて活用できるように頑張りましょう!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次