3
1

More than 3 years have passed since last update.

MicrosoftAccess2003のデータをPostgreSQL12に移行してみた

Last updated at Posted at 2020-01-19

はじめに

MicrosoftAccess2003のデータ(*.mdb) をPostgreSQL12に移行してみたのでその備忘録として残しておきます。
データ移行は、「MDB Tools」でCSVファイルに変化後、データのインポートを行った。
※MDB Toolsは、mdbファイルからCSVファイルやSQLファイルに変換できるツールです(その他にも色んな機能があります)。

前提条件

・OS環境は、Virtualboxで稼働中のCentOS8.1です。以下、OS詳細情報となります。

# cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)

・Virtualboxのネットワーク設定は、「NAT」「ホストオンリーアダプター」で構成。

・OSの初期設定が完了していること。

・MDB Toolsのインストールは、Linuxbrew経由でおこなう。
ソースからのインストールは、以下をご参照ください。
https://github.com/brianb/mdbtools

手順概要

手順は、以下の順におこなっていきます。

(1)Linuxbrewをインストール
(2)MDB-Toolsをインストール
(3)PostgreSQL12をインストール
(4)PostgreSQL12にデータをインポート

(1)Linuxbrewをインストール

(1.1)Linuxbrewのインストールユーザの設定

▼「qiita」ユーザを作成

# useradd qiita

▼「qiita」ユーザのパスワードを設定

# passwd qiita

▼「qiita」ユーザにsudo権限を付与(末尾に追記)

visudo
qiita        ALL=(ALL)       NOPASSWD: ALL

▼「qiita」ユーザに切り替える

# su - qiita

※「Linuxbrew」のインストールは、一般ユーザでないと失敗する。

(1.2)Linuxbrewをインストール

▼Linuxbrewの必須パッケージをインストール

$ sudo dnf -y groupinstall 'Development Tools' && sudo dnf -y install curl file git

▼Linuxbrewをインストール

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

※「Warning:/home/linuxbrew/.linuxbrew/bin is not in your PATH」が表示されるが無視してよい。

▼Linuxbrew関連の設定を定義(末尾に追記)

$HOME/.bash_profile
export PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH
export MANPATH=/home/linuxbrew/.linuxbrew/share/man:$MANPATH
export INFOPATH=/home/linuxbrew/.linuxbrew/share/info:$INFOPATH

▼設定ファイルの再読み込みを実施

$ source $HOME/.bash_profile

▼Linuxbrewバージョン確認

$ brew -v

※ここでバージョンが表示されればOK

(2)MDB Toolsをインストール

(2.1)MDB Tools インストール

▼MDB-Toolsをインストール

$ brew install mdbtools

▼「root」ユーザに切り替える

$ exit

▼MDB-Toolsのパスを設定

/etc/profile
export PATH=/home/linuxbrew/.linuxbrew/Cellar/mdbtools/0.7.1_3/bin/:$PATH

▼設定ファイルの再読み込みを実施

# source /etc/profile

※MDB-Toolsをインストールしたことで、以下のコマンドが使えるようになる。

# ls /home/linuxbrew/.linuxbrew/Cellar/mdbtools/0.7.1_3/bin/
mdb-array   mdb-header   mdb-parsecsv  mdb-schema  mdb-tables
mdb-export  mdb-hexdump  mdb-prop      mdb-sql     mdb-ver

(2.2)MDBファイルのバージョン確認

▼作業ディレクトリ「/tmp/mdb」を作成

# mkdir /tmp/mdb

▼FTPツールでMDBファイル「会員情報.mdb」を「/tmp/mdb」以下にコピー
※本環境では、「会員情報.mdb」をPostgreSQL12に移行する想定で、記述します。

▼MDBファイルのバージョンを確認

# mdb-ver /tmp/mdb/会員情報.mdb

※MDBファイルのバージョンが出力される。

(3)PostgreSQL12をインストール

▼既存環境のPostgreSQLが入っていないことを確認

# rpm -qa | grep postgres

▼PostgreSQL12のリポジトリをインストール

# dnf -y install https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-8-x86_64/pgdg-redhat-repo-42.0-6.noarch.rpm

▼リポジトリ情報を確認

# dnf info pgdg-redhat-repo

▼既存のPostgreSQLモジュールを削除

# dnf -y module disable postgresql

▼PostgreSQL12をインストール

# dnf -y install postgresql12-server

▼ログイン時の読み込みファイルにPostgreSQL12の設定を追記(末尾に追記)

/etc/profile
export PATH=/usr/pgsql-12/bin/:$PATH

▼設定ファイルの再読み込みを実施

# source /etc/profile

▼バージョン確認

# postgres --version

※PostgreSQLのバージョンが12であること

▼データベースの初期化

# postgresql-12-setup initdb

▼PostgreSQL12の起動・自動起動

# systemctl start postgresql-12 && systemctl enable postgresql-12

▼PostgreSQLのログイン確認

# sudo -u postgres psql -U postgres

※ログインができればOK!!

▼PostgreSQLから抜ける

postgres=# \q

(4)PostgreSQL12にデータをインポート

(4.1)mdbファイルからCSVファイルを生成

▼エクスポートする前にテーブル構造を確認

# mdb-schema /tmp/mdb/会員情報.mdb
↓以下、出力結果
-- ----------------------------------------------------------
-- MDB Tools - A library for reading MS Access database files
-- Copyright (C) 2000-2011 Brian Bruns and others.
-- Files in libmdb are licensed under LGPL and the utilities under
-- the GPL, see COPYING.LIB and COPYING files respectively.
-- Check out http://mdbtools.sourceforge.net
-- ----------------------------------------------------------

-- That file uses encoding UTF-8

CREATE TABLE [会員テーブル]
 (
        [会員NO]                        Text (8),
        [名前]                  Text (60),
        [フリガナ]                      Text (60),
        [〒]                    Text (16),
        [住所1]                 Text (100),
        [住所2]                 Text (100),
        [TEL]                   Text (24),
        [生年月日]                      DateTime,
        [退会]                  Boolean NOT NULL,
        [DM]                    Boolean NOT NULL
);

※「mdb-schema」コマンドを用いることでテーブル構造の確認ができます。

▼「会員情報.mdb」内にある「会員テーブル」のデータをCSVファイルにエクスポート

# mdb-export -D '%Y-%m-%d %H:%M:%S' -H /tmp/mdb/会員情報.mdb "会員テーブル" > /tmp/mdb/MemberTable.csv

※mdb-exportコマンドで、mdbファイルからCSVファイルを生成している。(SQLファイルで生成することも可能)
※上記コマンドで使用したオプションは、以下のとおり。

オプション 意味
-D 日付書式を指定
-H 出力時にカラム名を除去して出力

(4.2)データベース作成/環境確認

▼postgresユーザに切り替え

# su - postgres

▼データベースに接続

$ psql

▼データベース「qiita」を作成

CREATE DATABASE qiita;

▼データベース「qiita」に切り替える

\c qiita

▼現在のデータベースの文字エンコーディングを確認

\encoding
↓出力結果
UTF8

※本環境では、「UTF8」であればOKとする!!

▼クライアント側の文字エンコーディングを確認

show client_encoding;
↓以下出力結果
 client_encoding
-----------------
 UTF8
(1 行)

※本環境では、「UTF8」であればOKとする!!

(4.3)テーブル作成/データのインポート

▼手順4.1で確認したテーブル構造をもとにテーブルを作成

CREATE TABLE "会員テーブル"
 (
        "会員NO" varchar(510),
        "名前" varchar(510),
        "フリガナ" varchar(510),
        "〒" varchar(510),
        "住所1" varchar(510),
        "住所2" varchar(510),
        "TEL" varchar(510),
        "生年月日" timestamp,
        "退会" Boolean NOT NULL,
        "DM" Boolean NOT NULL
);

▼作成したテーブルのテーブル構造を確認

\d "会員テーブル"

▼CSVファイルのインポートを実施

copy "会員テーブル" from '/tmp/mdb/MemberTable.csv' with csv;

▼データインポート後の確認

SELECT * FROM "会員テーブル";

※ここでデータが表示されていれば完了!!

最後に

MySQL8への移行はこちらを参考に
MicrosoftAccess2003のデータをMySQL8に移行してみた

参考文献

MS Access の データを mdbtools で見る

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1