嗨,有谁知道这意味着什么?当我在服务器上部署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'
答案 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名称。如果两者之间存在不匹配,您将收到此错误。