PostgreSQL使用csv文件的COPY命令

3
我有一个包含两列的csv文件:productIdproductName
我的表格包含以下列:productIdproductNameproductprice
我想使用COPY命令将此文件复制到Postgres表中,并同时为第三列Productprice设置一个值。
所有行的productPrice都相同。我使用:
COPY product_master(productId, productName)
FROM 'product.txt' DELIMITERS ',' CSV; 

我想给所有行附加一个价格。

你想要做什么?附加什么? - Erwin Brandstetter
你没有说明价格如何派生。如果它是恒定的(暂时),那么Erwin的答案就足够了,但你没有给我们足够的信息来准确回答。 - ocharles
2个回答

3
剩余的列将会填充默认值,正如手册中所述

如果表中有任何未在列列表中出现的列,COPY FROM 将插入这些列的默认值。

因此,如果所有行的价格都相同,则创建一个列默认值。如果不再需要该列,请删除它。
ALTER TABLE product_master ALTER COLUMN productrice SET DEFAULT 12.5;
COPY ...
ALTER TABLE product_master ALTER COLUMN productrice DROP DEFAULT;

1

这更像是一个高级解决方案,用于导入数据,因此您的问题就在这里。

有几种方法可以做到这一点,但当将数据移动到数据库系统中时,我通常总是使用暂存表。例如product_master_stg,它可以非常通用,例如可能将列类型全部设置为文本和null,或者您可以更具体地匹配数据类型与预期文件列类型。在使用复制将数据放入暂存表后,我编写一个存储函数从暂存表中提取数据并将其转换和加载到目标表中,在此时您可以计算产品价格值。这非常适合不同的要求,主要缺点是需要调用存储函数才能将其传递到最终表中,但是每件事都有一些相关成本,因此不要认为这是一项不良成本。如果您不断遵循这种方法,它将很好地扩展,并且非常逻辑化和易于使用和维护。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接