【问题标题】:How to interpret this Rails error?如何解释这个 Rails 错误?
【发布时间】:2010-10-15 09:53:21
【问题描述】:

你好,有人知道这是什么意思吗?当我将应用程序部署在服务器上并使用 PostgresQL 时,我只会收到此错误。当我在本地运行并在 SQLite 上进行测试时,这很好。我有一个 features_simulations 连接表,我认为它与它有某种关系。

Processing AdminController#confirmed (for 211.30.107.155 at 2009-03-25 09:06:21) [GET]
  Session ID: 59d7fdbbb6ec77367c310df0c0928a2a


ActiveRecord::StatementInvalid (PGError: ERROR:  relation "features_simulations_id_seq" does not exist
: SELECT currval('features_simulations_id_seq')):
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:188:in `log'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:503:in `execute'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1000:in `select_raw'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:987:in `select'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:60:in `select_all'

【问题讨论】:

  • 什么是'features_simulations_id_seq'?
  • 我认为它可能需要一个 id 属性,但我的连接表只有 Simulation_id 和 feature_id。
  • 暗中射击:你有没有戳过 set_table_name 的任何地方?

标签: ruby-on-rails postgresql web-applications


【解决方案1】:

ActiveRecord 并不真正使用复合键。连接表中仍然必须有一个 ID 才能进行原子删除和更新。我认为其他人都说过同样的话,但方式更迂回。

【讨论】:

  • 您可以通过安装 Dr.Nics 复合主键来添加对 CPK 的支持,这将使 Model.find(1,2) 和它所需要的只是 set_primary_keys :field_x, :field_y。请参阅compositekeys.rubyforge.org 了解更多信息
【解决方案2】:

我不确定,但也许您需要 features_simulations 表中的 id。如果您使用 has_and_belongs_to_many 关系,则不需要 Id。但我认为对于 has_many :through,您的连接表中需要 id 列。

尝试在迁移中添加它:

add_column :features_simulations, :id, :integer, :primary_key

【讨论】:

    【解决方案3】:

    我认为“features _simulations _id _seq”是一个必须在数据库中创建的序列。 这个序列似乎正在为表生成 id。

    【讨论】:

      【解决方案4】:

      在 Postgres 中,您可以为自动递增字段使用序列类型,这将自动创建必要的序列。如果需要,您可以使用整数类型并手动创建序列,将默认值设置为序列中的下一个值。

      似乎代码正在尝试查找序列的当前值并且由于序列不存在而失败。我不确定 rails 是否会自动为 Postgres 主键创建正确的类型。

      【讨论】:

        【解决方案5】:

        这是固定装置的问题。根据您的表名检查您的夹具名称。如果两者之间不匹配,您将收到此错误。

        【讨论】:

          猜你喜欢
          • 2010-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-25
          • 2010-10-19
          • 2012-12-27
          相关资源
          最近更新 更多