带有csv文件的PostgreSQL COPY命令

时间:2011-11-14 12:47:37

标签: postgresql file-io postgresql-copy

我有一个包含两列的csv文件:productIdproductName 我的表格包含以下列:productIdproductNameproductprice

我希望能够使用COPY命令将此文件复制到Postgres表中,同时为第三列设置值:Productprice

所有行的

productPrice都相同。我用:

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

我想为所有行附加价格。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

这更像是导入数据的高级解决方案,因为这是您的问题。

有几种方法可以做到这一点,但在将数据移动到数据库系统时,我通常总是使用临时表。例如product_master_stg,它可以是非常通用的,例如它可能将列类型全部设置为text和null,或者您可以获得更具体的数据类型并将数据类型与预期的文件列类型相匹配。在使用copy将数据导入到分段之后,我编写了一个存储函数来从登台表中提取数据并将其转换并加载到目标表中,此时您可以计算出您的productprice值。这很好地适应了不同的要求,主要缺点是调用存储函数将其送到最终表,但是一切都有一些与之相关的成本,因此不要认为这是一个不好的成本。如果你经常遵循这种方法,它将很好地扩展,并且使用和维护是非常合理的。

相关问题