LoginSignup
1
1

More than 3 years have passed since last update.

GitBucket の データベースを H2DB から PostgreSQL に移行

Last updated at Posted at 2019-06-03

0. 基本的には竹添さんのブログを参照してください。

GitBucketをPostgreSQLやMySQLで動かす

※プラグインを入れている場合やデータ量が多い場合は、こちらも参照すると参考になるかもしれません。

1. PostgresSQL に GitBucket 用 User と DB を 用意してください。

Postgres SQL で ユーザとデータベースを作成し、ユーザにデータベースを割り当てる方法 を 参照。

2. GitBucket 用 のテーブル・その他を用意する。

2-1. gitbucket.warをダウンロード します。
2-2. ローカルPCから、一度「java -jar gitbucket.war」なりで、GitBucketを立ち上げて、GitBucket ホームを作成します。
2-3. GitBucket ホームにできた「database.conf」に 先ほど作成した、PostgreSQL の gitbucket 用の接続先を指定してください。

database.conf
db {
  url = "jdbc:postgresql://[PostgreSQL URL]:5432/gitbucket_db"
  user = "gitbucket"
  password = "xxxxxxxx"
}
2-4. もう一度「java -jar gitbucket.war」を実行することで、自動でテーブル・その他が作成されます。

3. GitBucket から データをエクスポートします。

GitBucket の 管理者機能である Data Export/Import 機能を使ってSQLを取得してください。

DataExport.png

4. 既存のGitBucketを止めてください。

5. GitBucket の データをインポートします。

5-1. 既に root というユーザは作成されているので、Export した SQL から削除してください。
5-2. 初回インポートの場合が多いはずなので、DELETE FROM の部分も必要ないので削除してください。
5-3. データ量が多いと Data Export/Import 機能からインポートできないので、
pgAdmin なりを 利用して Export した SQL を実行してください。

6. シーケンスの更新をしてください。

竹添さんのブログに書かれてあるシーケンスの更新以外に更新する必要があるものがあります。プラグインを利用していないとしても priority_priority_id_seq は新規リポジトリを作成する際に必要になるのでご注意ください。

pgAdmin(QueryTool)
SELECT setval('access_token_access_token_id_seq', (select max(access_token_id) + 1 from access_token));
SELECT setval('activity_activity_id_seq', (select max(activity_id) + 1 from activity));
SELECT setval('commit_comment_comment_id_seq', (select max(comment_id) + 1 from commit_comment));
SELECT setval('commit_status_commit_status_id_seq', (select max(commit_status_id) + 1 from commit_status));

SELECT setval('deploy_key_deploy_key_id_seq', (select max(deploy_key_id) + 1 from deploy_key));
SELECT setval('gist_comment_comment_id_seq', (select max(comment_id) + 1 from gist_comment));
SELECT setval('gpg_key_key_id_seq', (select max(key_id) + 1 from gpg_key));

SELECT setval('issue_comment_comment_id_seq', (select max(comment_id) + 1 from issue_comment));
SELECT setval('label_label_id_seq', (select max(label_id) + 1 from label));
SELECT setval('milestone_milestone_id_seq', (select max(milestone_id) + 1 from milestone));

SELECT setval('priority_priority_id_seq', (select max(priority_id) + 1 from priority));
SELECT setval('release_asset_release_asset_id_seq', (select max(release_asset_id) + 1 from release_asset));

SELECT setval('ssh_key_ssh_key_id_seq', (select max(ssh_key_id) + 1 from ssh_key));

7. database.conf を 書き直して GitBucket を起動してください。

db {
  url = "jdbc:postgresql://localhost/gitbucket_db"
  user = "gitbucket"
  password = "xxxxxxxx"
}
# PostgresSQL が localhost の 場合はポート5432は不要です(ポートを変えていたら必要になります)
1
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
1
1