データベースをPostgreSQLに移行する
Liferay DXP 2026.Q3+
Liferay DXPデータベースをPostgreSQLに移行するには、2つの段階があります。 まず、サーバー管理画面またはREST APIからデータベーススキーマをSQLファイルにエクスポートします。 次に、 データベース移行インポーターツール (db_migration_importer.sh) を実行して、スキーマとそのデータを空の PostgreSQL データベースにコピーします。 サポートされているソースデータベースは、DB2、MariaDB、MySQL、Oracle、およびSQL Serverです。 PostgreSQLのみがサポート対象です。 インポートを行うには、Liferay DXPをシャットダウンする必要があります。 ダウンタイムは、そのシャットダウンから始まり、PostgreSQLを再起動した後に終了します。
2026.Q3 より前のリリースについては、 PostgreSQL 移行ナレッジベース記事 を参照してください。
データベーススキーマのエクスポート
スキーマをエクスポートするには、システム管理者(omniadmin)アカウントと、ソースデータベース上で実行されているLiferay DXPインスタンスが必要です。
-
コントロール パネル → システム → サーバー管理 に移動します。
-
データベース移行 タブをクリックします。
-
以下の項目を入力してください。
エクスポートファイルのパス: サーバー上の書き込み可能なディレクトリのパスを入力してください。 Liferay DXPはSQLファイルとレポートをそこに書き込みます。 この項目は必須です。
テキスト認証: CAPTCHA チャレンジを完了してください。 デフォルトでは、このフィールドはセッション内で最初の認証に成功すると非表示になります。

-
をクリックしてエクスポート を実行します。
結果はタブの上部にメッセージとして表示されます。
| 条件 | メッセージ |
|---|---|
| 輸出は成功しました | データベーススキーマは[パス]に正常にエクスポートされました。 |
| エクスポートパスは書き込み不可です | データベーススキーマをエクスポートできませんでした。 エクスポート先のパスが書き込み可能であることを確認してください。 |
| テキスト認証の入力が間違っています | テキスト認証に失敗しました。 |
| CAPTCHAエンジンの設定が間違っています | CAPTCHAエラーが発生しました。 管理者にご連絡ください。 |
エクスポートされたデータは、ワークステーションではなく、Liferay DXPサーバーのファイルシステムに書き込まれます。 成功メッセージに指定されたディレクトリに tables.sql、 indexes.sql、および db_migration_schema_export_report.txt が存在することを確認してください。 まだ存在しないディレクトリは拒否されるのではなく作成されるため、入力ミスのあるパスでも新しいディレクトリが作成されます。
REST API を使用したスキーマのエクスポート
UI ではなくスクリプトからスキーマをエクスポートするには、リクエストボディにエクスポートパスを指定して POST /o/admin-server/v1.0/database-schema-export を呼び出します。 exportFilesPath は Liferay DXP サーバー上のディレクトリです。 発信者はシステム管理者でなければなりません。 UIとは異なり、REST APIにはテキスト認証の仕組みはありません。 test@liferay.com:test を、ご自身の管理者認証情報に置き換えてください。 本番環境では、デフォルトの認証情報を決して使用しないでください。
curl -X POST 'http://localhost:8080/o/admin-server/v1.0/database-schema-export' \
-H 'Content-Type: application/json' \
-u 'test@liferay.com:test' \
-d '{
"exportFilesPath": "/directory/"
}'
呼び出しが成功すると、エクスポートパス、書き込まれたファイル名、およびレポートファイル名を含む 200 が返されます。
{
"exportFilesPath": "/directory",
"fileNames": [
"indexes.sql",
"tables.sql"
],
"reportFileName": "db_migration_schema_export_report.txt"
}
レスポンス内の exportFilesPath は、ファイルが書き込まれた場所を示していますが、送信したパスと一致しない場合があります。
| ステータスコード | 原因 |
|---|---|
400 | 空白 exportFilesPath 値、またはサーバーが書き込みできないパス |
403 | システム管理者権限を持たない呼び出し元 |
OpenAPI 仕様全体を参照し、リクエストを対話的に実行するには、API Explorer を http://[host]:[port]/o/api で開きます。
エクスポートされたファイルの確認
エクスポートでは、テーブル定義を tables.sqlに、インデックス定義を indexes.sqlに、レポートを db_migration_schema_export_report.txt に書き込みます。 これらのファイルにはスキーマ定義のみが含まれています。 インポーターは実行時にソースデータベースからテーブルデータを読み込むため、エクスポートからシャットダウンまでの間に行われた書き込みも含まれます。
データベースパーティショニング が有効になっている場合、デフォルト インスタンスは tables.sql と indexes.sql というプレーンな名前を保持し、デフォルト以外のすべてのインスタンスは、会社 ID をプレフィックスとして付けた独自のファイル ペア [companyId]_tables.sql と [companyId]_indexes.sql を取得します。
db_migration_schema_export_report.txt エクスポートで書き込まれなかったテーブルの一覧 tables.sql. これらのテーブルとそのデータは、移行後、PostgreSQLから削除されています。 テーブルを保持するには、まず元のファイルをコピーし、次にその定義を tables.sql に、そのインデックスを indexes.sqlに追加し、ソーステーブルの列と一致させます。
エクスポートされたSQLファイルを手動で編集すると、インポートが失敗したり、不完全なインポートが発生したりするリスクがあります。 これらのファイルは、ソースデータベースの構文ではなく、PostgreSQLの構文を使用しています。
PostgreSQLへのインポート
インポーターツールは、パスにJavaランタイムが設定されている必要があり、LinuxまたはmacOSが必要です。 Liferay DXP には、 [Liferay Home]/tools/portal-tools-db-migration-importer に含まれています ( Liferay Home を参照してください)。 ソースデータベースとターゲットPostgreSQLデータベースの両方にアクセスできるホストから実行してください。 --source-user アカウントは、ソース データベースのすべてのパーティションへの読み取りアクセス権を持っている必要があります。
-
空のPostgreSQLデータベースを作成します。 対象ユーザーは、スキーマとテーブルを作成できる必要があります。
-
DB2、Oracle、またはSQL Serverソースの場合は、ソースデータベースベンダーのJDBCドライバを
[Liferay Home]/tools/portal-tools-db-migration-importer/libにコピーします。 このツールには、MariaDB、MySQL、PostgreSQLのドライバが含まれています。 -
前回のエクスポート以降にスキーマが変更された場合(パッチ適用後、モジュールのデプロイ後、または新しい仮想インスタンスの作成後など)、スキーマを再度エクスポートしてください。 Liferay DXPは引き続き稼働している必要があります。
-
エクスポートしたSQLファイルがインポーターを実行しているホストにまだ存在しない場合は、コピーしてください。
-
ソースデータベースに接続されているすべてのLiferay DXPノードをシャットダウンしてください。 インポーターがデータベースから読み取っている間は、何もデータベースに書き込むことはできません。
-
[Liferay Home]/tools/portal-tools-db-migration-importerから、エクスポートされた SQL ファイルのパスとソースおよびターゲットの接続設定を指定して、db_migration_importer.shを実行します。./db_migration_importer.sh \ --path "/directory/" \ --source-jdbc-url "jdbc:mysql://localhost:3306/schema" \ --source-user "xyz123" \ --source-password "xyz123" \ --target-jdbc-url "jdbc:postgresql://localhost:5432/schema" \ --target-user "xyz321" \ --target-password "xyz321"エクスポートされたファイルはすべて
--pathディレクトリに保存してください。1 回の実行ですべてのインスタンスがインポートされます。tables.sqlまたはindexes.sqlが存在しない場合、ツールはターゲット データベースに何も書き込む前に停止します。 パスワードは履歴とプロセス一覧に表示されるため、制限付きアカウントからコマンドを実行するか、実行後にシェル履歴を削除してください。 -
インポートが成功したことを確認してください。
db_migration_import_report.txtを--pathディレクトリで開き、ソースとターゲットのテーブルとビューのカウントが一致していることを確認します。欠落しているターゲット テーブルおよび欠落しているターゲット ビューのリストは空である必要があります。 データベースのパーティショニングが有効になっている場合、レポートは各パーティションごとにこれらの行を繰り返します。重要終了コード
0は、例外なく実行が完了したことを意味し、すべてのテーブルがコピーされたことを意味するものではありません。 -
PostgreSQLデータベースをバックアップしてください。 このバックアップは、最初の起動が失敗した場合の復元ポイントとなります。
-
各ノードで、Liferay DXPをPostgreSQLデータベースに接続するように設定します。 利用可能な JDBC 設定方法については、 データ ソースの設定 を参照してください。 お使いのインストール環境でJNDIデータソースを使用している場合は、そのリソースを更新してください。
ソースデータベースに対して、次のようなオーバーライドファイル内で設定されている `
hibernate.dialect`、`custom.sql.function.isnull`、または`custom.sql.function.isnotnull` のオーバーライドをすべて削除してください。portal-ext.propertiesなどのオーバーライドファイル、またはLIFERAY_*環境変数として設定されている、ソースデータベースに対する `hibernate.dialect`、`custom.sql.function.isnull`、`custom.sql.function.isnotnull` のオーバーライドをすべて削除してください。 Liferay DXPはJDBC接続からデータベースを検出し、方言とこれらのSQL関数を自動的に設定します。 -
Liferay DXPを起動します。
-
管理者としてログインし、サイトとコンテンツが存在すること、および起動ログにデータベースエラーがないことを確認してください。
スクリプトからインポーターを実行する場合は、レポートだけでなく終了コードも確認してください。 ツールは、成功した場合は 0 、インポートが失敗した場合は 1 、使用方法メッセージを表示するたびに 2 で終了します。 Exit 2 は --help、オプションの欠落または無効、およびサポートされていないソースまたはターゲット データベースをカバーします。 インポートが失敗するとスタックトレースが標準エラーに書き込まれ、成功すると db_migration_import_report.txt が書き込まれます。
輸入業者オプション
db_migration_importer.sh では、以下のオプションが利用可能です。
| オプション | 必須 | 説明 |
|---|---|---|
--path <arg> | はい | ソースSQLファイルのパス |
--source-jdbc-url <arg> | はい | ソースデータベースのJDBC URL |
--source-user <arg> | はい | ソースデータベースのユーザー名 |
--source-password <arg> | はい | ソースデータベースユーザーのパスワード |
--target-jdbc-url <arg> | はい | 対象のPostgreSQLデータベースのJDBC URL |
--target-user <arg> | はい | 対象のPostgreSQLデータベースのユーザー名 |
--target-password <arg> | はい | 対象のPostgreSQLデータベースユーザーのパスワード |
--jdbc-batch-size <arg> | いいえ | JDBCバッチサイズ(デフォルト 2500) |
--jdbc-fetch-size <arg> | いいえ | JDBC結果セットのフェッチサイズ(デフォルト 2500) |
- ヘルプ | いいえ | 使用方法メッセージ。最初の引数としてのみ認識されます。 |
完全なコマンドに --help を追加すると、使用方法メッセージを表示する代わりにインポートが実行されます。