3

productId、の 2 つの列を持つ csv ファイルがありますproductName
私のテーブルには次の列があります: productId, productName, productprice.

COPYコマンドを使用してこのファイルを Postgres テーブルにコピーし、同時に 3 番目の列の値を設定できるようにしたい: Productprice.

productPriceすべての行で同じです。私が使う:

COPY product_master(productId, productName)
FROM 'product.txt' DELIMITERS ',' CSV; 

すべての行に価格を付けたい。

4

2 に答える 2

3

マニュアルに記載されているように、残りの列にはデフォルトが入力されます。

テーブルに列リストにない列がある場合、COPYFROMはそれらの列のデフォルト値を挿入します。

したがって、価格がすべての行で同じである場合は、列のデフォルトを作成します。不要になった場合は、後で削除してください。

ALTER TABLE product_master ALTER COLUMN productrice SET DEFAULT 12.5;
COPY ...
ALTER TABLE product_master ALTER COLUMN productrice DROP DEFAULT;
于 2011-11-14T13:54:37.677 に答える
1

これは、データをインポートするためのより高レベルのソリューションであり、質問です。

これを行うにはいくつかの方法がありますが、通常、データをデータベース システムに移動するときは常にステージング テーブルを使用します。product_master_stg のように、列の型がすべてテキストと null に設定されているか、より具体的にデータ型を予想されるファイル列の型に一致させることができるなど、非常に汎用的なものにすることができます。コピーを使用してステージングにデータを取得した後、ストアド関数を作成してステージング テーブルからデータを抽出し、変換してターゲット テーブルにロードします。この時点で、productprice 値を計算できます。これはさまざまな要件に適しています。主な欠点は、ストアド関数を呼び出して最終テーブルに取得することですが、すべてに関連するコストがかかるため、これを悪いコストとは見なさないでください。

于 2011-11-14T19:57:29.400 に答える