2011-11-14 72 views
3

私は、2つのカラム(productIdproductName)を持つcsvファイルを持っています。
テーブルのカラムは、productIdproductNameproductpriceです。PostgreSQLのcsvファイルを使用したCOPYコマンド

COPYコマンドを使用してこのファイルをPostgresテーブルにコピーすると同時に、第3列の値をProductpriceに設定したいと考えています。

productPriceはすべての行で同じです。私は以下を使用します:

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

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

+0

あなたは今何をしたいですか?感知? –

+0

価格の導出方法を指定していません。それが一定であれば(今のところは)アーウィンの答えで十分ですが、あなたは正確に答えるために十分に私たちを与えていません。 – ocharles

答えて

3

残りの列はmanual tells usように、デフォルトで充填される。

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

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

ALTER TABLE product_master ALTER COLUMN productrice SET DEFAULT 12.5; 
COPY ... 
ALTER TABLE product_master ALTER COLUMN productrice DROP DEFAULT; 
0

これは、データをインポートするための高度なソリューションです。

これを行うにはいくつかの方法がありますが、通常はデータをデータベースシステムに移動するときにステージングテーブルを使用します。これは非常に一般的なことができるproduct_master_stgなどです。これは、すべての型がtextおよびnullに設定されているか、より具体的になり、データ型を予想されるファイル列の型に一致させることができます。コピーを使用してステージングにデータを取得した後、ステージングテーブルからデータを抽出し、ターゲットテーブルにロードしてこの時点でproductprice値を計算できるストアドファンクションを作成します。これは、さまざまな要件に適しています。主な欠点は、最終的なテーブルに格納するためのストアド関数への呼び出しですが、すべてにはコストがかかります。あなたがこのアプローチに常に従うならば、それはうまくスケールされ、使用および維持することは非常に論理的です。

関連する問題