2011-11-14 72 views
3

我有一個csv文件有兩列:productIdproductName
我的表格有以下列:productIdproductNameproductpricePostgreSQL COPY命令與csv文件

我希望能夠使用COPY命令將此文件複製到Postgres表中,並同時爲第三列設置值:Productprice

productPrice對於所有行都是相同的。我用:

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

我想附加一個價格到所有行。

+0

你想..現在呢? Attect? –

+0

您尚未指定如何獲得價格。如果它是恆定的(現在),那麼歐文的答案就足夠了,但是你沒有給我們足夠的準確答案。 – ocharles

回答

3

其餘列將使用默認的填寫,爲manual tells us

如果在該表中沒有的列列表的列, COPY FROM將插入默認值那些專欄。

因此,如果價格對於所有行都是相同的,請創建列缺省值。 之後刪除它,如果你不再需要它。

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的列類型,或者可以獲得更具體的數據類型並將其與預期的文件列類型進行匹配。在使用副本獲取數據到分期後,我編寫一個存儲函數以從分期表中提取數據,並將其轉換並加載到目標表中,此時您可以計算您的產品價格值。這很適合不同的需求,主要的缺點是調用存儲函數來獲得它到你的決賽桌,但一切都有一些相關的成本,所以不要認爲這是一個不好的成本。如果你一直遵循這種方法,它將很好地擴展並且使用和維護非常合理。