2

csv ファイルから postgresql にデータをインポートしようとしていますが、残念ながら完全にフォーマットされていません。

例:

DATE,TIME,NUMERIC,NUMERIC,NUMERIC,NUMERIC,INTEGER

列を持つテーブルにデータをインポートしたい:

timestamp with timezone, numeric, numeric, numeric, numeric, integer

データをインポートするには、コピーを使用します:

COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;

もちろん、日付と時刻は ',' で区切られているため、postgresql はそれらが 2 つの別個のデータ フィールドであると想定するため、機能しません。

.csv を .csv と同じようにセットアップされたテーブルにインポートすることはできましたが、後でタイムゾーン付きのタイムスタンプとして日付と時刻を取得する必要があり、インポート後に大量のデータを処理する必要があるためです。パフォーマンスの問題のため、変換は私の最後の選択です。

「sed 's/,/ /' EURUSD30.csv > EURUSD30E.csv」を使用してインポートする前に .csv ファイルを編集しようとしましたが、コマンド「's/」の入力が間違っている、または可能性があるというエラーが表示されます。見つかりません。これは他の誰にとってもうまくいくように見えるので、私はかなり無知ですが、これも私の最初の選択ではありません.

インポート時に時刻と日付を 1 つのタイムスタンプ値にマージするように postgresql に単純に指示できれば、より簡単になります。何か案は?

ありがとう

4

1 に答える 1

4

あなたの最善の策は、またはテーブルへCOPYのデータであり、そこから次のことを行います。TEMPORARYUNLOGGED

INSERT INTO real_table
SELECT col1, col2, col3, datecol + timecol, col6, ...
FROM temp_copy_table;

そのプロセス中に、他の必要なデータ マッサージも実行できます。

マージするときはタイムゾーンを考慮してください。DATE+TIMEを生成timestamp without time zone:

regress=# SELECT pg_typeof(DATE '2012-02-01' + TIME '10:00');
          pg_typeof          
-----------------------------
 timestamp without time zone
(1 row)

おそらくタイムゾーン付きのタイムスタンプを保存したいので、日付と時刻を特定のタイムゾーンであると解釈するように Pg に指示することができます。

(datecol + timecol) AT TIME ZONE 'UTC'

またはタイムスタンプのローカルタイムゾーンが何であれ。

于 2012-10-02T13:36:37.913 に答える