カテゴリー【Node.js、JavaScript、PostgreSQL】
Node.jsからPostgreSQLサーバに接続・操作する
POSTED BY
2023-01-11
2023-01-11



最新では呼び出し方が少し変わっているようなので、以下サンプルを書き直しました。
PostgreSQLモジュールのインストール
npm install pg
サンプルソース
JavaScript | pg-sample.js | GitHub Source |
//PostgreSQL接続サンプル async function main() { const UTIL = require('util'); const PG = require('pg'); const POOL = new PG.Pool({ //接続パラメータを指定してPoolを生成する host: '127.0.0.1', port: 5432, database: 'testdb', user: 'testuser', password: 'testpass' }); POOL.connect( async (err, client) => { //接続 if (err) { console.log(err); return; //エラー終了 } try { var query = "DROP TABLE IF EXISTS testtbl"; //既存テーブル消去 console.log(query); var result = await client.query(query); query = "CREATE TABLE testtbl (key VARCHAR(512) PRIMARY KEY, value TEXT NOT NULL)"; //新規テーブル作成 console.log(query); result = await client.query(query); query = "INSERT INTO testtbl (key, value) VALUES ('きー1', 'ばりゅー1')"; //データ投入 console.log(query); result = await client.query(query); query = "INSERT INTO testtbl (key, value) VALUES ('きー2', 'ばりゅー2')"; //データ投入 console.log(query); result = await client.query(query); query = UTIL.format("SELECT value FROM testtbl WHERE key = '%s'", 'きー2'); //2番目のデータを抽出 console.log(query); result = await client.query(query); console.log(result.rows); if(result.rows.length > 0) { console.log(result.rows[0].value); } } catch (err) { console.log(err.stack); //エラー } client.release(true); //これを忘れるとサーバにずっとコネクションが溜まる }); } //async function main() main();
実行結果
node pg-sample.js DROP TABLE IF EXISTS testtbl CREATE TABLE testtbl (key VARCHAR(512) PRIMARY KEY, value TEXT NOT NULL) INSERT INTO testtbl (key, value) VALUES ('きー1', 'ばりゅー1') INSERT INTO testtbl (key, value) VALUES ('きー2', 'ばりゅー2') SELECT value FROM testtbl WHERE key = 'きー2' [ { value: 'ばりゅー2' } ] ばりゅー2
pgモジュールでpoolを生成してからconnect、releaseするのがポイントです。
テーブルやデータの生成を待ってから抽出するので全部async&awaitで同期的にやっていますが、Node.jsらしく非同期で行うなら
client.query(query, (err, result) => { if (err) { console.log(err.stack); } else { console.log(result.rows); } });
などと書いていくことになります。ネストがすごいことになりますが…。
【関連記事】
PostgreSQLでGEOGRAPHY検索をNode.jsから行う
何枚刷っても0円!定額制フルカラー印刷機レンタルサービス【スリホ】

■【スリホとは?】
月々15,800円〜からご利用頂けるフルカラー・モノクロ印刷し放題のプリンタレンタルサー...【READ MORE】
【電話成果対応】24時間365日全国対応の【原一探偵事務所】

46年の調査実績と年間50,000件のご相談件数!
探偵業界最大手の原一探偵事務所です。
積み重ねてきた実績と...【READ MORE】
【ビハクシア】13個の効果効能を実現 -1980円(税込) -でお得にお試し

\元サッカー選手"丸山桂里奈さん"愛用/
薬用クリーム『ビハクシア』で、肌悩みにアプローチ
シミができる...【READ MORE】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
※本記事内容の無断転載を禁じます。
【キーワード検索】
ニットのプロが素材からこだわり抜いたオリジナルアイテムと雑貨【サワダマルシェ】
当日便も申込OK!乗継便検索にも対応♪【NAVITIME Travel】
<謝礼あり>コスメ・サプリ・健康食品モニター、治験参加者 募集【クリニカル・ボランティア・サポート】
ログインプラス
手に塗るだけで薄い膜を作り菌を寄せ付けない保湿もできるハンドマスキングクリーム
ここのあんこは、生きている。【餡が自慢の大阪の和菓子屋 福壽堂秀信オンラインショップ】
イタリア伝統のバケッタレザー×日本の熟練職人 の縫製が生み出す上質な革製品≪AYAME ANTICO≫
フレーバーミストスティック《C-tec Duo》
ファンケルから待望のプログラム登場!お得な増量セット!【ファンケルの発芽米】
ラサーナ プレミオールお試しヘアケア3点キット「21日間分」

当日便も申込OK!乗継便検索にも対応♪【NAVITIME Travel】

<謝礼あり>コスメ・サプリ・健康食品モニター、治験参加者 募集【クリニカル・ボランティア・サポート】

ログインプラス

手に塗るだけで薄い膜を作り菌を寄せ付けない保湿もできるハンドマスキングクリーム

ここのあんこは、生きている。【餡が自慢の大阪の和菓子屋 福壽堂秀信オンラインショップ】

イタリア伝統のバケッタレザー×日本の熟練職人 の縫製が生み出す上質な革製品≪AYAME ANTICO≫

フレーバーミストスティック《C-tec Duo》

ファンケルから待望のプログラム登場!お得な増量セット!【ファンケルの発芽米】

ラサーナ プレミオールお試しヘアケア3点キット「21日間分」

【最近の記事】【全部の記事】
PowerPointでテキストを左右反転するにはオンボードグラフィックスと外付けビデオカードを同時利用してデュアルディスプレイにする
EaseUS RecExpertsで画面を録画する
【MySQL】テーブル定義を確認してインデックスを操作する【MariaDB】
通常のC言語配列にstd::for_each,find_if等のC++ラムダ式ループを適用する
【C/C++】処理系に依存しない64ビットフラグ演算集【保存版】
【C++】2つのvector配列を比較して両方に共通する要素を取り出す【set_intersection】
【Node.js】ビットコイン(BTC)およびイーサリアム(ETH)の日本円(JPY)レートを取得する
【Node.js】BTC←→SATOSHIおよびETH←→WEIの相互変換を行う
【Node.js】文字列を後から復元できる可逆の暗号化にかける
【人気の記事】【全部の記事】
進研ゼミチャレンジタッチをAndroid端末化する【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Googleスプレッドシートを編集したら自動で更新日時を入れる
Googleスプレッドシートで図形をコピーして使いまわすには
【Javascript】JSON配列内にある特定要素の取得法【Node.js】
Windows版Google Driveが使用中と言われアンインストールできない場合
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux共通】プロキシサーバーの利用設定
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
Ubuntuで固定IPアドレスを使う設定をする
【カテゴリーリンク】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋