カテゴリー【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から行う
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
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!ご連絡は以下アドレスまでお願いします★
☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】
【最近の記事】【全部の記事】
アプリにPrivacyInfoを追加しITMS-91053: Missing API declarationに対応するnvidia-smiを1秒ごとに実行してGPU使用率をモニタリング
TSUKUMOのマルチGPUパソコンWA9J-X211/XTのUbuntu Server 22.04でMYCOEIROINK作成コードを実行し音声合成モデルをトレーニングする
TSUKUMOのマルチGPUパソコンWA9J-X211/XTにUbuntu Server 22.04とCOEIROINK Engineを導入する
Python venv(仮想環境作成)でError: Command returned non-zero exit status 1のエラー対処法
【Ubuntu】プロジェクトごとに複数のPythonバージョンを使い分ける
【PHP】フォーム入力を受け取り出力する
【Ubuntu】aptでインストールしたapache2にソースコンパイルしたphpをマルチスレッドモードで組み込む
【PHP】HTMLファイルを読み込んで文字列変換して出力する
TSUKUMOのマルチGPUパソコンWA9J-X211/XTにUbuntu Server 22.04とVOICEVOX Engineを導入する
【人気の記事】【全部の記事】
進研ゼミチャレンジタッチをAndroid端末化するGoogleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows版Google Driveが使用中と言われアンインストールできない場合
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
Googleスプレッドシートを編集したら自動で更新日時を入れる
size_tとssize_tを使い分けてSegmentation Faultを予防する
【カテゴリーリンク】
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
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ