マイペースなRailsおじさん

Ruby、Ruby on Rails、オブジェクト指向設計を主なテーマとして扱います。だんだん大きくなっていくRuby on Rails製プロダクトのメンテナンス性を損なわない方法を考えたり考えなかったりしている人のブログです。

RELATIONAL DATASET REPOSITORYのデータセットをPostgreSQLに取り込む

Relational Dataset Repositoryで、リレーショナルデータベース用のデータセットが公開されている。データセットによっては100万件ちかくのデータが入っているので、クエリ最適化などの練習に使えそう。

下記のデータセットをPostgresSQLに取り込んでみることにした。

https://relational.fit.cvut.cz/dataset/Financial

やること

データは公開されたMySQLのサーバーに入っていて、そこから適宜dumpしてね、という形で配布されている。このため、MySQLに保存されているデータをどうにかしてPostgreSQLに取り込む必要がある。

手順

下記の手順でデータを取り込む。

  1. mariadbをインストール
  2. pgloaderをインストール
  3. postgresのパスワード方式をmd5にする
  4. postgresに取り込み用のデータベースとユーザーを作成する
  5. pgloaderでデータを取り込む

mariadbをインストール

配布元のサーバーはmariadbで動いているので、互換性の問題が起きにくいようにmariadbをインストールする。

sudo apt install mariadb-client-10.3

pgloaderをインストール

MySQLのサーバーからPostgreSQLのサーバーに直接データを取り込むツール、pgloader をインストールする。

sudo apt install pgloader

postgresのパスワード方式をmd5にする

最近のpostgresは、デフォルトで暗号化方式がscram-sha-256になっているが、pgloaderは対応していない。md5で暗号化するように設定して認証できるようにする。

  1. postgresql.confにpassword_encryption = md5を追記する
  2. pg_hba.confでscram-sha-256をmd5に書き換える
  3. postgresを再起動

postgresに取り込み用のデータベースとユーザーを作成する

createdb financial
createuser dump

superuserなユーザーでpsqlを起動

ALTER ROLE dump WITH PASSWORD 'dump';

pgloaderでデータを取り込む

pgloader mysql://guest:relational@relational.fit.cvut.cz/financial postgresql://dump:dump@localhost/financial

参考資料

便利なリレーショナルデータベースのオープンデータセット:RELATIONAL DATASET REPOSITORY – SHIN総研

Relational Dataset Repository

pgloader 10 fell through ECASE expression · Issue #1183 · dimitri/pgloader · GitHub

ALTER ROLE