我试图在JRuby 1.7下使用ActiveRecord 3.2和PostgreSQL在表之间复制(部分)记录。
这个SO answer提供的指导很好,可以在Ruby下运行,但在使用activerecord-jdbcpostgresql-adapter
进行操作时不适用于JRuby。
我的两个模型(Parties
和Holders
)具有(几乎)相同的属性。我删除了常见的“id”列,因此不会复制它,并保持列的交集:
columns = (Party.column_names & Holder.column_names) - ["id"]
然后,我根据特定的持有人记录创建新的Party记录:
parties_created =
Party.create(Holder.where(:title_id => @title.id).all(:select => columns.join(",") ).map(&:attributes))
而且,即使我确认columns
不包含“id”列
columns are: ["first_name", "middle_name", "other_name"]
jdbc适配器坚持包含它:
SQL (11.0ms) INSERT INTO "parties" ("first_name", "id", "middle_name", "other_name") VALUES ('JOHN', NULL, 'HENRY', 'SMITH') RETURNING "id"
ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint
如何告诉适配器保留“id”列的内容? 任何人都可以提出解决方案吗?
谢谢, 添