dockerでpostgresql構築
docker run -d --name dev-postgres -e POSTGRES_PASSWORD=test -p 5432:5432 postgres:alpine
-d:バックグラウンドで起動する
--name dev-postgres:dev-postgresという名前をつける
-e POSTGRES_PASSWORD=test:スーパーユーザーのパスワードを指定
-p:ホストの5432ポートでアクセスしたら、コンテナの5432に転送する
postgres:alpine:alpineを利用したpostgresのイメージ
起動確認
この記事中は、起動させたままにします。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc0dfbba334d postgres:alpine "docker-entrypoint..." 10 days ago Up 12 seconds 0.0.0.0:5432->5432/tcp dev-postgres
先ほどの設定が生きています。
IMAGEにはpostgres:alpine
PORTSでホストの5432からコンテナの5432に転送指定
NAMESにはdev-postgres
補足として、停止と削除は以下のコマンドから。
$ docker stop dev-postgres
$ docker rm dev-postgres
アクセス
dev-postgresにアクセス
docker exec -it dev-postgres bash
dev-postgres内でpostgres
psql -U postgres
postgresの色々
// 終了
¥q
// DB一覧表示
¥l
それらを実行した時のコード
$ docker exec -it dev-postgres bash
bash-4.3# psql -U postgres
psql (10.1)
Type "help" for help.
postgres=# \q
bash-4.3# exit
exit
テスト準備
npmでpgをインストールします。
typescriptを使いたいので、@types/pgもインストールします。
npm install pg @types/pg --save
テストコード
import * as pg from "pg";
describe( "Postgres", () => {
before( async () => {
const config = {
user: "postgres",
password: "test",
port: 5432,
host: "localhost",
database: "postgres"
};
const client = new pg.Client( config );
await client.connect();
try {
// testというdbが存在したら消す
await client.query( "DROP DATABASE test" );
} catch ( err ) {
// 処理なし
}
// testというdbを作成
await client.query( "CREATE DATABASE test;" );
} );
it( "1000件insert", async () => {
const connectString = "tcp://postgres:test@localhost:5432/test";
const client = new pg.Client( connectString );
await client.connect();
// テーブル作成
await client.query( "CREATE TABLE users(id INTEGER, name CHAR(20) , PRIMARY KEY(id) )" );
// 値挿入
const text = "INSERT INTO users(id, name) VALUES($1, $2) RETURNING *";
const len = 1000 | 0;
let i = 0 | 0;
console.time( "insert" );
while ( i < len ) {
await client.query( text, [ i, "name" + i ] );
i = (i + 1) | 0;
}
console.timeEnd( "insert" );
const res = await client.query( "SELECT COUNT (*) FROM users" );
console.log( res.rows[ 0 ].count );
await client.end();
} );
} );