如何解释这个Rails错误?

时间:2009-03-25 09:10:04

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

嗨,有谁知道这意味着什么?当我在服务器上部署app并使用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'

5 个答案:

答案 0 :(得分:1)

ActiveRecord实际上并不使用复合键。连接表仍然必须有一个ID用于原子删除和更新。我认为其他人都说了同样的话,但是更加迂回。

答案 1 :(得分:0)

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

尝试在迁移中添加它:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

似乎代码试图找到序列的当前值并失败,因为序列不存在。我不确定rails是否会自动为Postgres主键创建正确的类型。

答案 4 :(得分:0)

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