MySQL LOAD DATA INFILE与PostgreSQL COPY FROM命令[英] MySQL LOAD DATA INFILE with PostgreSQL COPY FROM command

本文是小编为大家收集整理的关于MySQL LOAD DATA INFILE与PostgreSQL COPY FROM命令的处理方法,想解了MySQL LOAD DATA INFILE与PostgreSQL COPY FROM命令的问题怎么解决?MySQL LOAD DATA INFILE与PostgreSQL COPY FROM命令问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我是PostgreSQL的新手.实际上,我以前在使用mySQL,但是由于某些项目的特定原因,我需要使用PostgreSQL并进行POC.

现在的问题是: 我正在使用mySQL加载数据填充命令将列内容从文件加载到我的数据库表.

我的表结构是: 表名:msisdn 表列名:ID(主键 - auto_generated),job_id,msisdn,region,status

但是我的输入文本文件(rawbase.txt)仅在列下方: MSISDN,区域

因此,我使用以下命令将这些上述2列加载给初始job_id和状态.

LOAD DATA INFILE 'D:\\project\\rawBase.txt' INTO TABLE MSISDN 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(MSISDN,REGION) 
SET JOB_ID = 'XYZ1374147779999', STATUS = 0;

您可以看到,加载数据填充命令中有一个选项,我可以为输入文本文件中不存在的列(JOB_ID和状态)设置特定的初始值.

现在,

在PostgreSQL的情况下,我希望发生同样的事情.

也有同样的命令可用副本 如下:

COPY MSISDN FROM 'D:\\project\\rawBase.txt' WITH DELIMITER AS ','

,但我无法为我的输入文本文件中不存在的其余列(JOB_ID和状态)设置特定的初始值.我没有得到任何富有成果的例子.

如果可能的话,请给出一些建议.

问候, 桑迪

推荐答案

您可以使用管道进行" UNIX方式":

cat rawbase.txt | awk '{print $0",XYZ1374147779999,0"}' | psql -d dbname -c "copy MSISDN FROM stdin with delimiter AS ','"

现在,从问题中的文件路径中看来,您正在使用MS-Windows,但是Windows可以通过 msys cygwin> cygwin .

其他推荐答案

COPY使用列列表,并在未指定的表列上设置a DEFAULT.

regress=> CREATE TABLE copydemo(a text not null, b text not null default 'blah');

regres=> \COPY copydemo(a) FROM stdin
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> blah
>> otherblah
>> \.
regres=> SELECT * FROM copydemo;
     a     |  b   
-----------+------
 blah      | blah
 otherblah | blah
(2 rows)

您可能是从文件而不是stdin中COPY;我只是在STDIN上做了我的意思.关键是,不需要CSV中的值的列具有DEFAULT s集,并且您在COPY中指定列列表,例如COPY (col1, col2).

.

不幸的是,您想要的是您想要的副本特定SET.您可以通过临时表上台并按照Igor建议进行INSERT INTO ... SELECT,如果您不能或不想ALTER您的表格列列DEFAULTs.

本文地址:https://www.itbaoku.cn/post/1764074.html