ОШИБКА: столбец "increment_by" не существует - Postgres 10 и Rails 5 - PullRequest
0 голосов
/ 08 мая 2018

Это похоже на обычную ошибку с Postgres 10, но я не уверен, что это всего лишь Postgres 10 или потому что я использую Rails 5. У меня есть приложение Rails 5 для Digital Ocean, которое готовится к запуску, и когда я начал создавать резервные копии, я столкнулся с огромной проблемой. Когда я пытаюсь сделать резервные копии с помощью Navicat или напрямую с помощью pg_dump, я сталкиваюсь со следующей ошибкой - [Err] [Bak] Get sequences: ERROR: column "increment_by" does not exist LINE 1: SELECT last_value, increment_by, max_value, min_value, cache...

Я не могу понять, что делать, и на сайт уже добавлено слишком много информации, чтобы разрушить ее и начать все сначала. Я надеюсь, что кто-то здесь нашел обходной путь, по крайней мере, чтобы позволить мне выполнить резервное копирование, чтобы я мог воссоздать базу данных в правильной версии.

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

В случае, если кто-то столкнется с этим с Rails 4.1 (4.1.16 в моем случае), ответ для Rails 4.2 (здесь: https://github.com/rails/rails/issues/28780#issuecomment-354868174) отлично работает, но мне пришлось внести одно изменение, чтобы заставить его работать - Я изменил module PostgreSQL на class PostgreSQLAdapter.

0 голосов
/ 17 июля 2018

Я обновляю устаревшее приложение и столкнулся с этим в Rails 4.2. Я взял изменение в # 31330, поместил его в инициализатор в config / initializers / backport_pg_10_support_to_rails_4.rb, и это работает для меня:

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.
#

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...