summaryrefslogtreecommitdiff
path: root/doc/update/mysql_to_postgresql.md
diff options
context:
space:
mode:
authorJacob Vosmaer <contact@jacobvosmaer.nl>2014-05-19 17:51:58 +0200
committerJacob Vosmaer <contact@jacobvosmaer.nl>2014-05-19 17:51:58 +0200
commit6be0188b5c289b1cff7f15fcfdff0ea9b8eec1ff (patch)
tree12d9a4147a06d60ae67ff8978aa00d33aabeef85 /doc/update/mysql_to_postgresql.md
parentdca537ab2902aa9936e4c29574ad540793028a76 (diff)
downloadgitlab-ce-6be0188b5c289b1cff7f15fcfdff0ea9b8eec1ff.tar.gz
Rebuild indexes after a MySQL conversion
Diffstat (limited to 'doc/update/mysql_to_postgresql.md')
-rw-r--r--doc/update/mysql_to_postgresql.md38
1 files changed, 33 insertions, 5 deletions
diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md
index 4d591d4d4cf..acd1e33f599 100644
--- a/doc/update/mysql_to_postgresql.md
+++ b/doc/update/mysql_to_postgresql.md
@@ -1,10 +1,11 @@
# Migrating GitLab from MySQL to Postgres
If you are replacing MySQL with Postgres while keeping GitLab on the same
-server all you need to do is to export from MySQL and import into Postgres as
-described below. If you are also moving GitLab to another server, or if you are
-switching to omnibus-gitlab, you may want to use a GitLab backup file. The
-second part of this documents explains the procedure to do this.
+server all you need to do is to export from MySQL, import into Postgres and
+rebuild the indexes as described below. If you are also moving GitLab to
+another server, or if you are switching to omnibus-gitlab, you may want to use
+a GitLab backup file. The second part of this documents explains the procedure
+to do this.
## Export from MySQL and import into Postgres
@@ -21,9 +22,35 @@ mysqldump --compatible=postgresql --default-character-set=utf8 -r databasename.m
python db_converter.py databasename.mysql databasename.psql
psql -f databasename.psql -d gitlabhq_production
+# Rebuild indexes (see below)
+
sudo service gitlab start
```
+
+## Rebuild indexes
+
+The lanyrd database converter script does not preserve all indexes, so we have
+to recreate them ourselves after migrating from MySQL. It is not necessary to
+shut down GitLab for this process.
+
+```
+# Clone the database converter on your Postgres-backed GitLab server
+cd /tmp
+git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
+
+# Stash changes to db/schema.rb to make sure we can find the right index statements
+cd /home/git/gitlab
+sudo -u git -H git stash
+
+# Generate the `CREATE INDEX CONCURRENTLY` statements based on schema.rb
+cd /tmp/mysql-to-postgresql-converter
+ruby index_create_statements.rb /home/git/gitlab/db/schema.rb > index_create_statements.psql
+
+# Execute the SQL statements against the GitLab database
+sudo -u git psql -f index_create_statements.psql -d gitlabhq_production
+```
+
## Converting a GitLab backup file from MySQL to Postgres
GitLab backup files (<timestamp>_gitlab_backup.tar) contain a SQL dump. Using
@@ -64,5 +91,6 @@ sudo -u git -H python mysql-postgresql-converter/db_converter.py gitlabhq_produc
sudo -u git -H tar rf TIMESTAMP_gitlab_backup.tar db/database.sql
-# Done! TIMESTAMP_gitlab_backup.tar can now be restored into a Postgres GitLab installation.
+# Done! TIMESTAMP_gitlab_backup.tar can now be restored into a Postgres GitLab
+# installation. Remember to recreate the indexes after the import.
```