PostgreSQL で,ランダムデータのテーブルを作る
【概要】
約 500M バイトの CSV ファイルを生成し,PostgreSQL のデータベースにインポートする方法を解説する.
【目次】
【関連する外部ページ】
- PostgreSQL 公式ページ: https://www.postgresql.org/
【サイト内の関連ページ】
1. 前準備
PostgreSQL のインストール
- Windows における,PostgreSQL 18,pgAdmin 4,PostGIS 3 のインストール,psql によるテーブル定義とレコード挿入については,別ページ »を参照
- Ubuntu における,PostgreSQL 18,pgAdmin 4,PostGIS 3 のインストール手順は,別ページ »を参照
ランダムデータ(CSV 形式)の準備
- ランダムデータ(CSV 形式)の生成プログラム
生成プログラムの詳細は,別ページ »を参照
- ランダムデータ(CSV 形式)の準備
次のコマンドで,約 500M バイトのランダムデータ(CSV 形式)を生成する.
./populate.out 7300000 > 500m.csv
2. postgresql.conf の設定
設定ファイルの場所は,「sudo find / -name "postgresql.conf" -print」コマンドで検索できる.
- 次の設定パラメータを調整する(値は搭載メモリに応じて調整する).
shared_buffers = 1GB work_mem = 1GB max_files_per_process = 1000 effective_cache_size = 4GB個人利用の環境で,オンライントランザクション処理が不要な場合は,WAL(先行書き込みログ)の生成量を最小にして運用できる.
wal_level = minimal archive_mode = off max_wal_senders = 0 - 設定ファイルの変更を反映するため,PostgreSQL サーバを再起動する.エラーメッセージが表示されなければ正常に動作している(<バージョン>には,導入した PostgreSQL のメジャーバージョンを指定する).
sudo pg_ctlcluster <バージョン> main restart sudo pg_ctlcluster <バージョン> main status
3. CSV ファイルのインポート
- 性能測定を行う場合は,OS のディスクキャッシュのクリア,新規データベースの作成,vacuum を実行する.次のコマンドを順に実行する.
sudo pg_ctlcluster <バージョン> main stop sudo sync sudo sysctl -w vm.drop_caches=3 sudo pg_ctlcluster <バージョン> main start sudo pg_ctlcluster <バージョン> main status echo "drop database if exists testdb;" | sudo -u postgres psql echo "create database testdb;" | sudo -u postgres psql echo "vacuum full;" | sudo -u postgres psql -d testdb - テーブルの定義,CSV ファイルのインポート,データ確認を行う.「select count(*) from T500m;」でレコード数を確認し,date コマンドで処理時間を計測する.
echo "create table T500m(num integer, name text, lat real, lon real, at timestamp);" | sudo -u postgres psql -d testdb date +%H:%M:%S.%3N echo "\copy T500m from '500m.csv' delimiter ','" | sudo -u postgres psql -d testdb date +%H:%M:%S.%3N echo "select count(*) from T500m;" | sudo -u postgres psql -d testdb