7

我有一个 Rails 3 应用程序,我需要将外部系统提供的 XML 文件提取到 Postgres 数据库中。我想使用ActiveRecord-Import 之类的东西,但这似乎无法处理 Postgres 的 upsert 功能,并且我将摄取的一些记录已经存在,但需要更新。

我正在阅读的大部分内容都建议即时编写 SQL,但这似乎是一个可能已经解决的问题。我就是找不到。

谢谢。

4

3 回答 3

7

您可以使用upsert在 MySQL 和 PostgreSQL 上进行更新插入。

如果您正在寻找原始速度,您可以使用nokogiri和 upsert。

使用data_miner导入数据可能更容易,它在内部使用 nokogiri 和 upsert。

于 2012-07-05T14:10:22.463 回答
1

如果您使用的是 PostgreSQL 9.1,您应该使用可写的公用表表达式。就像是:

WITH updates (id) AS (
     UPDATE mytable SET .....
      WHERE ....
     RETURNING id
)
INSERT INTO mytable (....)
SELECT ... 
  FROM mytemptable
 WHERE id NOT IN (select id from updates);

在这种情况下,您首先在临时表中批量处理薄,然后它会尝试根据您的逻辑更新临时表中的记录,然后插入其余部分。

于 2012-09-29T02:06:17.813 回答
-1

这是一个两步的事情。首先,您需要获取 XML 文件。如果它是由用户通过一种对您来说很幸运的形式提供的,否则您需要使用 ruby​​ 的标准 HTTP 库或其他类似 mechanize 的 gem 来获取它(这实际上非常棒)

第二件事真的很简单。您将所有 XML 读入字符串,然后可以使用以下代码将其转换为哈希:

Hash.from_xml(xml_string)

然后你可以解析和处理数据......

于 2011-10-18T05:59:20.003 回答