Commit 2d2ffc6f5c0d9b487cef3079ce3e9d578e5775a9

Authored by Dmitriy Zaporozhets
2 parents dda852a0 8402bca7

Merge pull request #1666 from zzet/feature/postgres

Postgresql
1 env: 1 env:
  2 + - DB=postgresql
2 - DB=mysql 3 - DB=mysql
3 before_install: 4 before_install:
4 - sudo apt-get install libicu-dev -y 5 - sudo apt-get install libicu-dev -y
@@ -11,6 +12,7 @@ rvm: @@ -11,6 +12,7 @@ rvm:
11 - 1.9.3 12 - 1.9.3
12 services: 13 services:
13 - mysql 14 - mysql
  15 + - postgresql
14 before_script: 16 before_script:
15 - "cp config/database.yml.$DB config/database.yml" 17 - "cp config/database.yml.$DB config/database.yml"
16 - "cp config/gitlab.yml.example config/gitlab.yml" 18 - "cp config/gitlab.yml.example config/gitlab.yml"
@@ -11,8 +11,9 @@ end @@ -11,8 +11,9 @@ end
11 gem "rails", "3.2.8" 11 gem "rails", "3.2.8"
12 12
13 # Supported DBs 13 # Supported DBs
14 -gem "sqlite3"  
15 -gem "mysql2" 14 +gem "sqlite3", :group => :sqlite
  15 +gem "mysql2", :group => :mysql
  16 +gem "pg", :group => :postgres
16 17
17 # Auth 18 # Auth
18 gem "devise", "~> 2.1.0" 19 gem "devise", "~> 2.1.0"
@@ -245,6 +245,7 @@ GEM @@ -245,6 +245,7 @@ GEM
245 multi_json (~> 1.3) 245 multi_json (~> 1.3)
246 omniauth-oauth (~> 1.0) 246 omniauth-oauth (~> 1.0)
247 orm_adapter (0.3.0) 247 orm_adapter (0.3.0)
  248 + pg (0.14.0)
248 polyglot (0.3.3) 249 polyglot (0.3.3)
249 posix-spawn (0.3.6) 250 posix-spawn (0.3.6)
250 pry (0.9.9.6) 251 pry (0.9.9.6)
@@ -441,6 +442,7 @@ DEPENDENCIES @@ -441,6 +442,7 @@ DEPENDENCIES
441 omniauth-google-oauth2 442 omniauth-google-oauth2
442 omniauth-ldap! 443 omniauth-ldap!
443 omniauth-twitter 444 omniauth-twitter
  445 + pg
444 pry 446 pry
445 pygments.rb (= 0.3.1) 447 pygments.rb (= 0.3.1)
446 rack-mini-profiler 448 rack-mini-profiler
config/database.yml.postgresql 0 → 100644
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +#
  2 +# PRODUCTION
  3 +#
  4 +production:
  5 + adapter: postgresql
  6 + encoding: unicode
  7 + database: gitlabhq_production
  8 + pool: 5
  9 + username: postgres
  10 + password:
  11 + # host: localhost
  12 + # socket: /tmp/postgresql.sock
  13 +
  14 +#
  15 +# Development specific
  16 +#
  17 +development:
  18 + adapter: postgresql
  19 + encoding: unicode
  20 + database: gitlabhq_development
  21 + pool: 5
  22 + username: postgres
  23 + password:
  24 + # socket: /tmp/postgresql.sock
  25 +
  26 +#
  27 +# Staging specific
  28 +#
  29 +staging:
  30 + adapter: postgresql
  31 + encoding: unicode
  32 + database: gitlabhq_staging
  33 + pool: 5
  34 + username: postgres
  35 + password:
  36 + # socket: /tmp/postgresql.sock
  37 +
  38 +# Warning: The database defined as "test" will be erased and
  39 +# re-generated from your development database when you run "rake".
  40 +# Do not set this db to the same as development or production.
  41 +test: &test
  42 + adapter: postgresql
  43 + encoding: unicode
  44 + database: gitlabhq_test
  45 + pool: 5
  46 + username: postgres
  47 + password:
  48 + # socket: /tmp/postgresql.sock
config/initializers/postgresql_limit_fix.rb 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
  2 + class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  3 + class TableDefinition
  4 + def text(*args)
  5 + options = args.extract_options!
  6 + options.delete(:limit)
  7 + column_names = args
  8 + type = :text
  9 + column_names.each { |name| column(name, type, options) }
  10 + end
  11 + end
  12 +
  13 + def add_column_with_limit_filter(table_name, column_name, type, options = {})
  14 + options.delete(:limit) if type == :text
  15 + add_column_without_limit_filter(table_name, column_name, type, options)
  16 + end
  17 +
  18 + def change_column_with_limit_filter(table_name, column_name, type, options = {})
  19 + options.delete(:limit) if type == :text
  20 + change_column_without_limit_filter(table_name, column_name, type, options)
  21 + end
  22 +
  23 + alias_method_chain :add_column, :limit_filter
  24 + alias_method_chain :change_column, :limit_filter
  25 + end
  26 +end
db/migrate/20121009205010_postgres_create_integer_cast.rb 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +class PostgresCreateIntegerCast < ActiveRecord::Migration
  2 + def up
  3 + execute <<-SQL
  4 + CREATE CAST (integer AS text) WITH INOUT AS IMPLICIT;
  5 + SQL
  6 + rescue ActiveRecord::StatementInvalid
  7 + end
  8 +
  9 + def down
  10 + execute <<-SQL
  11 + DROP CAST (integer AS text);
  12 + SQL
  13 + rescue ActiveRecord::StatementInvalid
  14 + end
  15 +end
doc/installation.md
@@ -75,6 +75,9 @@ Now install the required packages: @@ -75,6 +75,9 @@ Now install the required packages:
75 # If you want to use MySQL: 75 # If you want to use MySQL:
76 sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev 76 sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
77 77
  78 + # If you want to use PostgreSQL:
  79 + sudo apt-get install -y postgresql-9.2 postgresql-server-dev-9.2
  80 +
78 # 2. Install Ruby 81 # 2. Install Ruby
79 82
80 wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz 83 wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
@@ -188,9 +191,45 @@ and ensure you have followed all of the above steps carefully. @@ -188,9 +191,45 @@ and ensure you have followed all of the above steps carefully.
188 # Exit MySQL Server and copy the example config, make sure to update username/password in config/database.yml 191 # Exit MySQL Server and copy the example config, make sure to update username/password in config/database.yml
189 sudo -u gitlab cp config/database.yml.example config/database.yml 192 sudo -u gitlab cp config/database.yml.example config/database.yml
190 193
  194 + # Or
  195 + # PostgreSQL
  196 + # Install PostgreSQL as directed in Step #1
  197 +
  198 + # Connect to database server
  199 + sudo -u postgres psql -d template1
  200 +
  201 + # Add a user called gitlab. Change $password to a real password
  202 + template1=# CREATE USER gitlab WITH PASSWORD '$password';
  203 +
  204 + # Create the GitLab production database
  205 + template1=# CREATE DATABASE IF NOT EXISTS gitlabhq_production;
  206 +
  207 + # Grant all privileges on database
  208 + template1=# GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab;
  209 +
  210 + # Quit from PostgreSQL server
  211 + template1=# \q
  212 +
  213 + # Try connect to new database
  214 + $ su - gitlab
  215 + $ psql -d gitlabhq_production -U gitlab
  216 +
  217 + # Exit PostgreSQL Server and copy the example config, make sure to update username/password in config/database.yml
  218 + sudo -u gitlab cp config/database.yml.postgres config/database.yml
  219 +
  220 + # If you need create development, test, staging or another database
  221 + # Repeate some steps with actual commands
  222 +
191 #### Install gems 223 #### Install gems
192 224
193 - sudo -u gitlab -H bundle install --without development test --deployment 225 + # Please, check Gemfile before run bundle install
  226 + # Select database gem, wich you will use
  227 + # or run to setup gems with mysql usage
  228 + sudo -u gitlab -H bundle install --without development test sqlite postgres --deployment
  229 + # or postgres
  230 + sudo -u gitlab -H bundle install --without development test sqlite mysql --deployment
  231 + # or sqlite
  232 + sudo -u gitlab -H bundle install --without development test mysql postgres --deployment
194 233
195 #### Setup database 234 #### Setup database
196 235