不動の鳥の勉強記録

時間があるときに勉強したことをメモします。

SQL Server から PostgreSQL への移行について

お久しぶりです。ひよです。私はコロナ下でも在宅ワークしながら生きています。 今日は久々に記事を書きたいと思います。

■はじめに

いままでSQL Server向けの開発および運用をメインにしていたのですが、PostgreSQLも使っていきたいという声がありました。 そこでSQL ServerからPostgreSQLへの移行を行う際の参考になるサイトがあったので情報をまとめたいと思います。

今回参考にしたのはこちらです。

PostgreSQL エンタープライズ・コンソーシアム : 活動報告トップページ

こちらのサイトの情報をまとめているが"PostgreSQLエンタープライズ・コンソーシアム"という団体です。 詳細についてはこちらをご確認ください。

それでは本文記載していきます。

■DB移行時に何をしなきゃいけないの

DB製品を変更するときは大きく下記2つの移行を行う必要があります。

  • データの移行
  • アプリケーションの移行

それぞれについて記載していきたいと思います。 一部筆者の思いが書かれている部分もありますのでご了承ください。

初めて実施される方はどのような作業が必要か全体を把握しておいた方がよいため下記2つの資料が参考になります。

■データの移行

DB製品を変更するときにデータの移行は重要になってきます。過去データはすべて捨ててよいというような要件はまずないのではないかと思います。

一般的に移行元のDBからデータを抽出し、移行先のDBにインポートできる形に変換しインポートを行います。

  1. SQL Serverではinsert文を作り出すようなdumpコマンドがないので、CSV形式のファイルに出力します。
  2. 出力したCSVファイルについて、改行コードの変換や、文字コードの変換を行いPostgreSQLにインポートできる形に整形します。 ※何を変換するかは、それぞれの環境によって文字コードも異なりますし、ご自身の環境に合わせて対応が必要となります。
  3. PostgreSQLでは、COPYコマンドでCSVファイルをテーブルに取り込みます。

上記3ステップだけなので簡単かと思いますが、データ量が多い場合は作業を行う環境により、CSVファイルの作成およびファイルの転送時間、CSVファイルの加工処理時間、PostgreSQLへのデータ取込み時間がそれぞれかかってきますので、予定通りの時間内で各作業が終了するのかを確認することが大切です。

また、上記ではCOPYコマンドの紹介をしていますが、PGEConsのレポートでは、COPYコマンドだと異常時に全件ロールバックがかかるため、"pg_bulkload"を利用することを推奨していました。

データ移行については下記URLが参考になります。

■アプリケーションの移行

データ移行と同様に重要なのがアプリケーションの移行となります。アプリケーションといってもいくつか種類があるのと、現在の作り方によって異なるため対応は環境により千差万別と思います。

DB製品が変わると例えばDB上にユーザが作成したプログラムの"ストアドプロシージャ"や、DB製品が用意している組み込み関数の有無などが発生することと、SQLの書き方なども影響してきます。 例えばSQL ServerPostgreSQLの差としては、PostgreSQLにはPROCEDUREはないため、FUNCTIONで代用する事になります。またSQL ServerではUUIDを発行する関数がデフォルトでありますが、PostgreSQLでは追加モジュールをインストールしないと使えません。

SQLの書き方については箇条書きですが下記影響があります。

  • TOP句がないため、LIMIT句などに書き換える。
  • 列の別名について、標準SQLではない記載をしている箇所は標準SQLに書き換える。
  • INSERT文のINTOが省略されていた場合、省略できないため書き足す。
  • DELETE文のFROMが省略されていた場合、省略できないため書き足す。
  • OUTPUT句はPostgreSQLにはない。
  • MERGE文はPostgreSQLは対応していないため、書き換える必要がある。
  • PostgreSQLはVIEWに対しては更新できない。
  • 文字列リテラルの区切り文字に二重引用符は使えない。
  • 識別名を表す時に角括弧は、二重引用符に書き換える。
  • 文字列連結の時は、+を || 演算子に置き換える。
  • LIKE演算子の中で文字クラスを扱っている部分は書き換える。 などなどこれ以外にも差があります。

これらを書き換えて問題なくコンパイルが通る形にしたうえで十分に試験を行う必要があります。 こういった一覧をすべてにまとめてくれているものがあるのはとても役に立ちますね。

アプリケーション移行については下記URLが参考になります。

■おわりに

今までSQL Serverについて詳細を勉強してきていたのが今後PostgreSQLとかに変更されていくと、私会社にいらないんじゃないかなと思いました。 今後の身の振り方を考えるタイミングが来たのかも知れません。