diff options
author | Nick Thomas <nick@gitlab.com> | 2018-01-15 17:05:51 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2018-01-16 14:04:50 +0000 |
commit | 3bb798756e52368ae2ae4a512e86a543dea8ca21 (patch) | |
tree | 99f05f8b6a93bfbd5160bbc740dc9cc905eddbf0 /config | |
parent | 04edbb5fb34c219e5179e3a6f59584835ce9ef8f (diff) | |
download | gitlab-ce-3bb798756e52368ae2ae4a512e86a543dea8ca21.tar.gz |
Support PostgreSQL 10
Diffstat (limited to 'config')
-rw-r--r-- | config/initializers/ar5_pg_10_support.rb | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/config/initializers/ar5_pg_10_support.rb b/config/initializers/ar5_pg_10_support.rb new file mode 100644 index 00000000000..3d8ccd814a8 --- /dev/null +++ b/config/initializers/ar5_pg_10_support.rb @@ -0,0 +1,48 @@ +raise "Vendored ActiveRecord 5 code! Delete #{__FILE__}!" if ActiveRecord::VERSION::MAJOR >= 5 + +require 'active_record/connection_adapters/postgresql/schema_statements' + +# +# Monkey-patch the refused Rails 4.2 patch at https://github.com/rails/rails/pull/31330 +# +# Updates sequence logic to support PostgreSQL 10. +# +# rubocop:disable all +module ActiveRecord + module ConnectionAdapters + module PostgreSQL + module SchemaStatements + # Resets the sequence of a table's primary key to the maximum value. + def reset_pk_sequence!(table, pk = nil, sequence = nil) #:nodoc: + unless pk and sequence + default_pk, default_sequence = pk_and_sequence_for(table) + + pk ||= default_pk + sequence ||= default_sequence + end + + if @logger && pk && !sequence + @logger.warn "#{table} has primary key #{pk} with no default sequence" + end + + if pk && sequence + quoted_sequence = quote_table_name(sequence) + max_pk = select_value("SELECT MAX(#{quote_column_name pk}) FROM #{quote_table_name(table)}") + if max_pk.nil? + if postgresql_version >= 100000 + minvalue = select_value("SELECT seqmin FROM pg_sequence WHERE seqrelid = #{quote(quoted_sequence)}::regclass") + else + minvalue = select_value("SELECT min_value FROM #{quoted_sequence}") + end + end + + select_value <<-end_sql, 'SCHEMA' + SELECT setval(#{quote(quoted_sequence)}, #{max_pk ? max_pk : minvalue}, #{max_pk ? true : false}) + end_sql + end + end + end + end + end +end +# rubocop:enable all |