2

経由でテキスト データを postgresql データベースにロードしようとしていますCOPY FROM。データは間違いなくきれいなCSVではありません。

入力データは常に一貫しているわけではありません。余分なフィールド (セパレーターはフィールドのコンテンツの一部) があったり、整数フィールドに 0 ではなく null があったりすることがあります。

その結果、PostgreSQL はエラーをスローし、ロードを停止します。

現在、perl を使用してデータを一貫性を持たせようとしています。

より良い戦略はありますか?

PostgreSQLは、その点でmysqlsqliteと同じくらい寛容であることが求められますか?

ありがとう

4

1 に答える 1

1

PostgreSQLCOPY FROMは怪しげなデータを処理するように設計されておらず、非常に厳密です。危険なデータの許容範囲はほとんどサポートされていません。

この提案されたパッチが PostgreSQL 9.3 に含まれる可能性があるとして数日前に投稿されるのを見るまでは、追加することにほとんど関心がないと思っていました。このパッチは断固として拒否されましたが、このアイデアに関心があることを示しています。スレッドを読んでください。

制約のないすべてのフィールドを持つCOPY FROMステージングTEMPORARYテーブルに入ることが可能な場合があります。text次に、そこから SQL を使用してデータをマッサージできます。ただし、SQLが少なくとも整形式で規則的である場合にのみ機能し、あなたのようには聞こえません。

データがクリーンでない場合は、適切なスクリプト言語のスクリプトを使用して前処理する必要があります。

そのスクリプトを持っています:

  • PostgreSQL とINSERT行に接続します。
  • PostgreSQL に接続し、スクリプト言語の Pg API を使用してCOPY行を入力します。また
  • できるきれいなCSVを書き出すCOPY FROM

これにはPython のcsvモジュールが便利です。好きな言語を使用できます。perl、python、php、Java、C、何でも。

あなたが熱狂的だったなら、あなたがそれを読んだときにデータを挿入してクリーンアップすることで、それをPL/Perluまたはに書き込むことができます。PL/Pythonu私は気にしません。

于 2012-09-17T10:20:38.240 に答える