当PostgreSQL / JDBC自动重新添加' id'以及如何使用ActiveRecord复制部分记录柱?

时间:2014-08-07 03:30:42

标签: postgresql activerecord

我试图在JRuby 1.7下使用ActiveRecord 3.2和PostgreSQL在表之间复制(部分)记录。

这个SO answer提供的指导很好,可以在Ruby下运行,但在使用activerecord-jdbcpostgresql-adapter进行操作时不适用于JRuby。

我的两个模型(PartiesHolders)具有(几乎)相同的属性。我删除了常见的“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”列的内容? 任何人都可以提出解决方案吗?

谢谢, 添

0 个答案:

没有答案