3

我有一个包含两列的 csv 文件:productId, productName.
我的表有以下列:productId, productName, productprice.

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

productPrice所有行都相同。我用:

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

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

4

2 回答 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;
于 2011-11-14T13:54:37.677 回答
1

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

有几种方法可以做到这一点,但在将数据移动到数据库系统时,我通常总是使用临时表。例如 product_master_stg 它可以是非常通用的,例如它可能将列类型全部设置为 text 和 null 或者您可以获得更具体的数据类型并将数据类型与预期的文件列类型匹配。在使用 copy 将数据放入 staging 之后,我编写了一个存储函数来从 staging 表中提取数据并转换并将其加载到目标表中,此时您可以计算您的 productprice 值。这很适合不同的需求,主要缺点是调用存储函数以将其放入决赛桌,但一切都有一些与之相关的成本,所以不要认为这是一个糟糕的成本。

于 2011-11-14T19:57:29.400 回答