2 つのテーブルを持つデータベース (postgres) があります。
CREATE TABLE invoices (
id bigint,
some_data varchar
)
CREATE TABLE charges (
id bigint,
invoice_id bigint,
some_data varchar
)
次の形式のcsvファイルをこのデータベースにロードしようとしています:
invoice_id, invoice_data, charge_id, charge_data
たとえば、csv ファイルに次の行を含めることができます。
1, $10.00, 1, $2.00
1, $10.00, 2, $5.00
1, $10.00, 3, $3.00
2, $2.00, 4, $1.00
2, $2.00, 5, $1.00
3, $11.00, 6, $11.00
このデータは、データベース内の次のレコードに対応している必要があります。
SELECT * FROM invoices;
id | some_data
-----+-------------
1 | $10.00
2 | $2.00
3 | $11.00
SELECT * FROM charges;
id | invoice_id | some_data
-----+------------+-------------
1 | 1 | $2.00
2 | 1 | $5.00
3 | 1 | $3.00
4 | 2 | $1.00
5 | 2 | $1.00
6 | 3 | $11.00
この種のデータをロードするための「ベスト プラクティス」はありますか? 現時点では、このファイルを中間テーブルにロードし、php スクリプト (悪い) で処理しています。かなり非効率です。より良い方法はありますか?これを中間テーブルにロードしてから、ストアド プロシージャを使用して情報を分割する必要がありますか? それとも、.csv ファイルを直接処理して、この情報をある種のスクリプトに分割する必要がありますか?