summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-20 09:10:08 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-20 09:10:08 +0000
commitc05117d9a25c4f8b2fbec6c520acdcc36f85f659 (patch)
tree12d9a4147a06d60ae67ff8978aa00d33aabeef85
parentf08cb264878b4051b07f773586994290117296a5 (diff)
parent6be0188b5c289b1cff7f15fcfdff0ea9b8eec1ff (diff)
downloadgitlab-ce-c05117d9a25c4f8b2fbec6c520acdcc36f85f659.tar.gz
Merge branch 'create_pg_indexes' into 'master'
Rebuild Postgres indexes after a MySQL conversion
-rw-r--r--doc/update/mysql_to_postgresql.md40
1 files changed, 34 insertions, 6 deletions
diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md
index 5b9209d7df4..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
@@ -15,15 +16,41 @@ sudo service gitlab stop
# Update /home/git/gitlab/config/database.yml
-git clone https://github.com/lanyrd/mysql-postgresql-converter.git
+git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
cd mysql-postgresql-converter
mysqldump --compatible=postgresql --default-character-set=utf8 -r databasename.mysql -u root gitlabhq_production
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.
```