Commit 5e20b0a73c51f8d480a94a384301135e765b0ad6

Authored by Sytse Sijbrandij
2 parents e6beb609 bc62c283

Merge branch 'new_index_converter' into 'master'

New index converter
Showing 1 changed file with 33 additions and 6 deletions   Show diff stats
doc/update/mysql_to_postgresql.md
@@ -34,21 +34,48 @@ The lanyrd database converter script does not preserve all indexes, so we have @@ -34,21 +34,48 @@ The lanyrd database converter script does not preserve all indexes, so we have
34 to recreate them ourselves after migrating from MySQL. It is not necessary to 34 to recreate them ourselves after migrating from MySQL. It is not necessary to
35 shut down GitLab for this process. 35 shut down GitLab for this process.
36 36
  37 +
  38 +### For non-omnibus installations
  39 +
  40 +On non-omnibus installations (distributed using Git) we retrieve the index
  41 +declarations from version control using `git stash`.
  42 +
37 ``` 43 ```
38 # Clone the database converter on your Postgres-backed GitLab server 44 # Clone the database converter on your Postgres-backed GitLab server
39 cd /tmp 45 cd /tmp
40 git clone https://github.com/gitlabhq/mysql-postgresql-converter.git 46 git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
41 47
42 -# Stash changes to db/schema.rb to make sure we can find the right index statements  
43 cd /home/git/gitlab 48 cd /home/git/gitlab
  49 +
  50 +# Stash changes to db/schema.rb to make sure we can find the right index statements
44 sudo -u git -H git stash 51 sudo -u git -H git stash
45 52
46 -# Generate the `CREATE INDEX CONCURRENTLY` statements based on schema.rb  
47 -cd /tmp/mysql-to-postgresql-converter  
48 -ruby index_create_statements.rb /home/git/gitlab/db/schema.rb > index_create_statements.psql 53 +# Generate add_index.rb
  54 +ruby /tmp/mysql-postgresql-converter/add_index_statements.rb db/schema.rb > /tmp/mysql-postgresql-converter/add_index.rb
  55 +
  56 +# Create the indexes
  57 +sudo -u git -H bundle exec rails runner -e production 'eval $stdin.read' < /tmp/mysql-postgresql-converter/add_index.rb
  58 +```
  59 +
  60 +### For omnibus-gitlab installations
  61 +
  62 +On omnibus-gitlab we need to get the index declarations from a file called
  63 +`schema.rb.bundled`. For versions older than 6.9, we need to download the file.
  64 +
  65 +```
  66 +# Clone the database converter on your Postgres-backed GitLab server
  67 +cd /tmp
  68 +/opt/gitlab/embedded/bin/git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
  69 +cd /tmp/mysql-postgresql-converter
  70 +
  71 +# Download schema.rb.bundled if necessary
  72 +test -e /opt/gitlab/embedded/service/gitlab-rails/db/schema.rb.bundled || sudo /opt/gitlab/embedded/bin/curl -o /opt/gitlab/embedded/service/gitlab-rails/db/schema.rb.bundled https://gitlab.com/gitlab-org/gitlab-ce/raw/v6.9.1/db/schema.rb
  73 +
  74 +# Generate add_index.rb
  75 +/opt/gitlab/embedded/bin/ruby add_index_statements.rb /opt/gitlab/embedded/service/gitlab-rails/db/schema.rb.bundled > add_index.rb
49 76
50 -# Execute the SQL statements against the GitLab database  
51 -sudo -u git psql -f index_create_statements.psql -d gitlabhq_production 77 +# Create the indexes
  78 +/opt/gitlab/bin/gitlab-rails runner 'eval $stdin.read' < add_index.rb
52 ``` 79 ```
53 80
54 ## Converting a GitLab backup file from MySQL to Postgres 81 ## Converting a GitLab backup file from MySQL to Postgres