【Node.js + PostgreSQL】Node.jsをPostgreSQLに接続して、クエリ操作を実行してみる
目次
- PostgreSQLのインストール
- pgAdminをインストールする
- データベースとテーブルを作成
- pgAdminをデータベースに接続する
- Node.jsをデータベースに接続する
- データを登録、取得、削除する
- まとめ
今回はNode.jsを実際にデータベースに接続して、データを入れ込んだり、取得したりということをやってみたいと思います。
データベースはPostgreSQLを選びました。
PostgreSQLは、Webシステムで使われるデータベースシステムの一つです。
今回は前提の知識として、PostgreSQLの知識が必要ですので、もしよければ下記サイトからPostgreSQLについても勉強してみてください。
DBOnline PostgreSQLの使い方
https://www.dbonline.jp/postgresql/
今回は、PostgreSQLのインストールも含めてNode.jsから接続する手順をご紹介したいと思います。
それではいきましょう。
PostgreSQLのインストール
まず、PostgreSQLを使える環境を整えましょう。
下記、PostgreSQLの公式サイトから最新版をインストールしてください。
PostgreSQL インストール
https://www.postgresql.org/download/
Macの方はhomebrewからインストールすることも可能です。
その場合は下記コマンドを実行してください。
brew install postgresql
インストールが完了したら、下記コマンドを実行してください。
postgres --version
問題なくインストールされていたら、バージョンが表示されるはずです。
psqlコマンドを使用するため、パスが通ってなかったら、パスを通す必要があります。
下記コマンドでpsqlコマンドが使えるか確かめてください。
psql --version
使えなかった場合、下記手順でパスを通してください。
Windowsの場合
https://www.dbonline.jp/postgresql/install/index3.html#section1
Macの場合
https://awesomecatsis.com/mac-psql-path/
pgAdminをインストールする
PostgreSQLのGUIソフトであるpgAdminをインストールします。
下記公式サイトからpgAdminをインストールしてください。
https://www.postgresql.org/ftp/
「pgAdmin」→「pgAdmin4」→最新のバージョン→自分の環境にあったものをインストールしてください。
これでインストールできます。
データベースとテーブルを作成
ターミナルおよびコマンドプロンプトを開きましょう。
開いたら、下記コマンドでpostgreSQLに接続しましょう。
psql postgres
そうすると、パスワードが聞かれると思います。
そうしたら、PostgreSQLインストール時に設定したスーパーユーザーのパスワードを入力して入ります。
スーパーユーザーとしてPostgreSQLへ入れると思います。
スーパーユーザーとはPostgreSQLインストール時に作成する、ユーザーのことでPostgreSQLの管理者ユーザーとなります。
まず独自のデータベースを作成したいので、下記コマンドを実行してください。
create database nodedb;
するとデータベースが作成されます。
メタコマンド「¥l」で、データベースの一覧を確認すると「nodedb」が存在していると思います。
続いて下記コマンドで「nodedb」へ移動します。
¥c nodedb
そして、テーブルを作成します。
今回はスキーマは作成しないので、デフォルトの「public」スキーマ内に作成します。
下記コマンドを実行してテーブルを作成してください。
create table member (id integer primary key, name varchar(20));
するとテーブルが作成されるはずです。
メタコマンド「¥dt」を実行して作成したテーブルが存在するか確認してください。
作成されていればOKです。
pgAdminをデータベースに接続する
続いて、先ほどインストールしたpgAdminを開いてください。
pgAdminとPostgreSQLを接続していく作業をご紹介します。
左メニュー内の「Servers」で右クリックをして、「Create」→「Server…」とクリックしてください。
するか下記のようなポップアップメニューが表示されると思います。
「Name」にPCのローカルでのデータベースなのでとりあえず「local」と入力して、「Connection」タブをクリックしてください。
すると下記のような項目が表示されます。
入力項目は下記のようにしてください。
・「Host」→「127.0.0.1」
・「Port」→「5432」
・「Maintenance database」→「nodedb」
・「username」→ スーパーユーザー名
・「password」→ ユーザーパスワード
・「Save Password」→ チェックする
「Role」と「Service」は空で「Save」をクリックしましょう。
すると「Servers」下に「local」というサーバーが作成されているはずです。
ここを開いて「Databases」を開くと、デフォルトで入っている「postgres」と、作成した「nodedb」が入っているはずです。
上記のように、「nodedb」内の「Tables」内には作成した「member」テーブルも入っていることが確認できます。
このメニュー内の「member」のところで右クリックして、「View/Edit data」→「All Rows」とクリックすると、下記のように、作成したテーブル内のカラムが表示されていると思います。
まだデータが入っていないので、空ですが、ここにデータが入っていきます。
これでデータベースの準備は完了です。
Node.jsをデータベースに接続する
さて、いよいよNode.jsでデータベースに接続してみましょう。
お好きなディレクトリに「node-psql-test」というフォルダを作成し、その中にpsql.jsというファイルを作成しましょう。
そして、node.jsでPostgreSQLを利用できるようにするために「node-postgres」というライブラリをインストールする必要があります。
node-postgres
https://node-postgres.com/
cdコマンドで「node-psql-test」フォルダ内に移動したら下記コマンドでnode-postgresをインストールします。
npmでインストールしましょう。
npm install pg
インストール完了したら、続いて、psql.jsファイルにコードを書いていきます。
psql.jsを開いて、下記のように記述してください。
const { Client } = require("pg");
const client = new Client({
user: "ユーザー名",
host: "127.0.0.1",
database: "nodedb",
password: "ユーザーパスワード",
port: 5432,
});
client.connect();
client.query("SELECT NOW()", (err, res) => {
console.log(err, res);
client.end();
});
ひとつずつ見ていきましょう。
まず、postgreSQLのモジュールをインポートします。
const { Client } = require("pg");
そして、Client()インスタンスを作成するのですが、初期設定としてオプションにデータベースへ接続するための情報を記述します。
const client = new Client({
user: "ユーザー名",
host: "127.0.0.1",
database: "nodedb",
password: "ユーザーパスワード",
port: 5432,
});
それぞれ、データベースで設定した情報を記述してください。
そして「.connect()」でデータベースへ接続しましょう。
client.connect();
nodeからPostgreSQLに対してクエリ操作を行う際には「.query()」を使います。
今回は「”SELECT NOW()”」を実行して現在時刻をtimestamp型(日付と時刻を表すデータ型)で取得します。
そして、その結果をconsole.logで出力してみます。
client.query("SELECT NOW()", (err, res) => {
console.log(err, res);
client.end();
});
この内容でファイルを保存して、「node psql.js」で実行してみてください。
下記のような実行結果が帰ってくると思います。
resを全て表示しているので、たくさん情報が入っていますが、「rows」のなかに現在の日時が表示取得できていると思います。
これでnodeからデータベースへ接続ができました。
データを登録、取得、削除する
続いて、nodeからPostgreSQLへデータを登録、取得、削除するクエリ操作を行なってみたいと思います。
データを登録する
登録する場合は、PostgreSQLのSQLコマンドである「insert into」を使います。
psql.jsに下記のように記述してください。
const { Client } = require("pg");
const client = new Client({
user: "ユーザー名",
host: "127.0.0.1",
database: "nodedb",
password: "ユーザーパスワード",
port: 5432,
});
client.connect();
const query = {
text: "INSERT INTO member VALUES ($1, $2)",
values: [1, "山田太郎"],
};
client
.query(query)
.then((res) => {
console.log(res);
client.end();
})
.catch((e) => console.error(e.stack));
まず「.query()に」引数として渡すSQLコマンドと渡す値を変数queryに入れておきます。
今回は「1, ‘山田太郎’」というデータを登録します。
const query = {
text: "INSERT INTO member VALUES ($1, $2)",
values: [1, "山田太郎"],
};
そして、「query()」の引数にこのデータを渡してあげます。
そして、console.logでこれに対するレスポンス内容を表示するようにしましょう。
client
.query(query)
.then((res) => {
console.log(res);
client.end();
})
.catch((e) => console.error(e.stack));
これで「node psql.js」を実行してみてください。
コマンドラインには下記のようなレスポンス内容が表示されると思います。
どうやらinsertは成功しているようです。
本当にデータが登録されているか確かめてみましょう。
pgAdminの「nodedb」の中の「Tables」→「member」を右クリックして、「All Rows」を表示してみましょう。
するとちゃんと「1, 山田太郎」のデータが登録されているはずです。
※登録が確認できない場合は、上の再生マーク「▶︎」を押して更新してみましょう。
データを取得する
この容量でデータの取得もできます。
データの取得はPostgreSQLのSQLコマンドだと「Select from」です。
先ほど登録した「1, 山田太郎」を取得してみましょう。
psql.jsに下記のように記述してください。
const { Client } = require("pg");
const client = new Client({
user: "ユーザー名",
host: "127.0.0.1",
database: "nodedb",
password: "ユーザーパスワード",
port: 5432,
});
client.connect();
const query = {
text: "SELECT * FROM member",
};
client
.query(query)
.then((res) => {
console.log(res.rows[0]);
client.end();
})
.catch((e) => console.error(e.stack));
上記のように記述すれば、memberテーブル内のデータを全件取得できるはずです。
取得した内容をconsole.logで出力しています。
上記で実行すると下記のようにデータが表示されると思います。
データを削除する
最後に先ほど登録したデータを削除しましょう。
データの削除はPostgreSQLのSQLコマンドの「delete from」です。
psql.jsに下記のように記述してください。
const { Client } = require("pg");
const client = new Client({
user: "ユーザー名",
host: "127.0.0.1",
database: "nodedb",
password: "ユーザーパスワード",
port: 5432,
});
client.connect();
const query = {
text: "DELETE FROM member WHERE id = $1",
values: [1],
};
client
.query(query)
.then((res) => {
console.log(res);
client.end();
})
.catch((e) => console.error(e.stack));
上記を実行すると、ちゃんとデータが消えていると思います。
実行後のレスポンスを見ると、deleteはどうやら成功しているようです。
pgAdminで確認してみても、ちゃんと「1, ‘山田太郎’」は削除されていることがわかると思います。
まとめ
いかがだったでしょうか。
今回はNode.jsでPostgreSQLに接続して、クエリ操作を実行するということをやってみました。
今回やった内容をアプリケーションなどに組み込めば、データベースを用いた、データをGET、POSTするようなちゃんとしたアプリケーションが作れそうですね!
これからもNode.js+PostgreSQLの記事はまとめていきたいと思います。
それでは今回はここまで!
お疲れ様でした!