【问题标题】:PG::InvalidParameterValue: ERROR: invalid value for parameter "client_min_messages": "panic"PG::InvalidParameterValue:错误:参数“client_min_messages”的值无效:“恐慌”
【发布时间】:2020-03-29 21:32:52
【问题描述】:

rake db:create 显示错误 PG::InvalidParameterValue: ERROR: invalid value for parameter "client_min_messages": "panic" 提示:可用值:debug5、debug4、debug3、debug2、debug1、log、notice、warning、error。

捆绑安装后尝试运行 rake db:create commond。 在 config 文件夹中创建了 database.yml 文件,请在下面找到:

development:
  adapter: postgresql
  encoding: utf8
  database: thor_development1
  username: postgres
  password:
  host: localhost

test:
  adapter: postgresql
  encoding: utf8
  database: thor_test1
  username: postgres
  password:
  host: localhost
PG::InvalidParameterValue: ERROR:  invalid value for parameter "client_min_messages": "panic"
HINT:  Available values: debug5, debug4, debug3, debug2, debug1, log, notice, warning, error.
: SET client_min_messages TO 'panic'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `async_exec'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `block in execute'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:373:in `block in log'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activesupport-4.1.6/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:367:in `log'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql/database_statements.rb:127:in `execute'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql/schema_statements.rb:274:in `client_min_messages='
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:634:in `set_standard_conforming_strings'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:914:in `configure_connection'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:895:in `connect'
/Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql_adapter.rb:568:in `initialize'

尝试在 macOS Catalina 中安装

【问题讨论】:

  • 您能提供给我们您的config/database.yml吗?
  • Aurelien 添加了 database.yml 代码请查看
  • 我不明白为什么您的默认 min_messages 设置为“恐慌”。你可以尝试在开发中设置min_messages: notice
  • 代码不起作用:(
  • 错误是什么?这是一个例子:github.com/rails/rails/blob/…

标签: ruby-on-rails ruby postgresql activerecord rubygems


【解决方案1】:

我遇到了完全相同的问题,我终于弄清楚是什么问题了。我在我的 gems 文件夹中寻找“恐慌”这个词,并在我的 ActiveRecord 4.2.2 gem 中获得了命中,第 313 行。我对文件进行了猴子修补,将值更改为“错误”,然后我能够继续执行 db:create rake 任务。似乎 ActiveRecord gem 已更改,或者 pg gem 已更改,即使我使用的是旧的特定版本,因为几周前我能够运行 db:create,但现在不能没有这个黑客。

TL;DR:

gem info pg

cd 到安装它的文件夹(对我来说,~/.rvm/gems/ruby-2.3.0/gems)

grep -ri 'panic' .

将与 pg 相关的任何内容替换为“错误”或其他一些有效消息。

【讨论】:

  • 就我而言,我所做更改的文件是...gems/activerecord-4.1.8/lib/active_record/connection_adapters/postgresql_adapter.rb
  • 如果有人像我一样迷路了,这个答案对我有用。我在/.rvm/gems/ 文件夹中搜索了postgresql_adapter.rb,在编辑器中打开了文件,只是将self.client_min_messages = client_min_messages, 'panic' 中的“恐慌”替换为“警告”。
【解决方案2】:

我也面临同样的问题。我使用的是 postgres 9.4.1 并升级到最新版本(12.1)。由于版本更改,我遇到了这个问题。我恢复到 9.4.1。你也一样吗?

【讨论】:

  • 我相信你应该能够升级到至少 9.6 版本。
  • 这应该是评论,而不是“答案”
【解决方案3】:

我在 Postgres 12.1 中遇到了这个问题,我需要回滚到 9.4 并得到解决。

【讨论】:

  • 我正在使用带有 rails v 3+ 的 ruby​​ 1.9.3,根据您的评论,我意识到实际上这些版本的 ruby​​ on rails 可以在 Postgres
【解决方案4】:

为了使它与 PostgreSQL 版本 12 一起工作,我修改了 PostgreSQLAdapter 类以用“警告”消息替换“恐慌”。 请注意,如果您可以将 activerecord gem 升级到 4.2.6 或更高版本,则不需要此猴子补丁。我必须这样做,因为我的项目依赖于 gem activerecord-3.2.22.5

require 'active_record/connection_adapters/postgresql_adapter'

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  def set_standard_conforming_strings
    old, self.client_min_messages = client_min_messages, 'warning'
    execute('SET standard_conforming_strings = on', 'SCHEMA') rescue nil
  ensure
    self.client_min_messages = old
  end
end

【讨论】:

  • @orberkov 你需要创建一个新文件。我将其命名为“postgresql_adapter_monkeypatch.rb”,并将其放在 rails 目录 config/initializers/ 中。
  • 这很快就帮我解决了——谢谢。
  • 我在将 postgres 9.1 升级到 12(Rails 3)时遇到了同样的问题。我尝试在配置/初始化程序中使用上述补丁,但出现错误:“ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/abstract/connection_specification.rb:133:in `establish_connection':数据库配置指定不存在的 postgresql 适配器 (ActiveRecord::AdapterNotFound)"
  • @pooja 看来您的 activerecord gem 版本比我之前描述的要旧。尝试将 activerecord 升级到 v3.2.22.5 版本,看看是否有帮助。
【解决方案5】:

我需要对来自 @ruslan 的猴子补丁进行以下修改以使用 Rails 4.2.4:

require 'active_record/connection_adapters/postgresql_adapter'

module ActiveRecord
  module ConnectionAdapters
    class PostgreSQLAdapter
      def set_standard_conforming_strings
        old, self.client_min_messages = client_min_messages, 'warning'
        execute('SET standard_conforming_strings = on', 'SCHEMA') rescue nil
      ensure
        self.client_min_messages = old
      end
    end
  end
end

【讨论】:

    【解决方案6】:

    .rvm/gems/ruby-2.3.3/gems/active_record-4.1.9/lib/active_record/connection_adapters/postgresql_adapter.rb 文件中,将client_min_messages 的值更改为panic 以外的任何值。有效值可以是 - debug5、debug4、debug3、debug2、debug1、log、notice、warning、error。

    问题在于 ActiveRecord 中较新版本的 Postgresql 适配器,其中 panic 是新的默认值,而旧的 Postgres 版本不支持。

    【讨论】:

      【解决方案7】:

      在 PostgreSQL 12 中,disallowed the PANIC value 代表 client_min_messages,Rails 设置为 since 2.3.14。这已在 Rails 4.2.5 中修复。

      因此升级 Rails 解决了这个问题。一个指向more detailed report 的链接,物有所值。

      【讨论】:

        【解决方案8】:

        我在旧 Rails 版本上遇到了两个关于 pg12 的问题。该文件修复了 ruby​​ 1.8 和 activerecord 3.0.3 的两个问题。我把它放在 config/initializers/postgresql_adapter_pg12.rb

        require 'active_record/connection_adapters/postgresql_adapter'
        
        class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
          def set_standard_conforming_strings
            old, self.client_min_messages = client_min_messages, 'warning'
            execute('SET standard_conforming_strings = on', 'SCHEMA') rescue nil
          ensure
            self.client_min_messages = old
          end
        
          def column_definitions(table_name) #:nodoc:
            query <<-end_sql
              SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull
                FROM pg_attribute a LEFT JOIN pg_attrdef d
                  ON a.attrelid = d.adrelid AND a.attnum = d.adnum
               WHERE a.attrelid = '#{quote_table_name(table_name)}'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum
            end_sql
          end
        end
        

        【讨论】:

        • 非常感谢,这为我节省了使用活动记录 3.1.12 的旧版应用程序。旧版本似乎需要额外的 column_definition 补丁。
        【解决方案9】:

        在给定的日志中说:-

        /Users/galaxy/.rvm/gems/ruby-2.1.2@folderName/gems/activerecord-4.1.6/lib/active_record/connection_adapters/postgresql/schema_statements.rb:274:in `client_min_messages= '

        转到第 274 行的 schema statements.rb 文件,并为 `client_min_messages=' 分配以下任何值。

        debug5、debug4、debug3、debug2、debug1、日志、通知、警告、错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-15
          • 2018-10-01
          • 2020-10-06
          • 2013-09-03
          • 2015-03-29
          • 2014-08-24
          • 2019-03-09
          相关资源
          最近更新 更多