7

外部システムから提供された XML ファイルを Postgres データベースに取り込む必要がある Rails 3 アプリケーションがあります。ActiveRecord-Import のようなものを使用したいのですが、これは Postgres の upsert 機能を処理するようには見えず、取り込む予定のレコードの一部は既に存在しますが、更新する必要があります。

私が読んでいるもののほとんどは、その場で SQL を書くことを推奨していますが、これはすでに解決されているかもしれない問題のようです。私はそれを見つけることができません。

ありがとう。

4

3 に答える 3

7

upsert を使用して、MySQL および PostgreSQL で upsert を実行できます

生の速度を探している場合は、nokogiriと upsert を使用できます。

内部で nokogiri と upsert を使用するdata_minerを使用してデータをインポートする方が簡単かもしれません。

于 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

それは2段階のことです。まず、XML ファイルを取得する必要があります。幸運なフォームを介してユーザーから提供された場合、それ以外の場合は、ルビーの標準 HTTP ライブラリまたは mechanize のような宝石を使用してフェッチする必要があります (これは実際には非常に優れています)。

2番目のことは本当に簡単です。すべての XML を文字列に読み取り、次のコードでハッシュに変換できます。

Hash.from_xml(xml_string)

次に、データを解析して操作できます...

于 2011-10-18T05:59:20.003 に答える