5

表列:

col1, col2, col3, fname, lname

CSV 文件包含以下值:

col1,col2,col3
val1,val2,val3
val1,val2,val3

我想col1,col2,col3,fname,lname使用 postgres 的 COPY 功能添加来自 csv 的数据以及其他数据,即在表中。

这可以使用 COPY 完成吗?如果不是,请建议解决方法。

4

4 回答 4

1

psql \COPY 支持从程序输出读取。我们可以使用 cat 和 sed 即时修改文件:

'cat myFile | sed \'s/$/;col1;col2/\''

于 2017-05-25T08:13:43.333 回答
0

copy您可以在命令中指定列列表:

copy YourTable(col1,col2,col3) 
    from '/home/you/yourfile.csv' 
    delimiter ','
    csv header;

header选项告诉copy忽略第一行。

于 2015-12-30T13:42:02.433 回答
0

我正在使用以下解决方法,我创建了一个 shell 脚本来为 CSV 文件中的其他列值添加前缀。

additional_cols="Fred,Solo";#fname,lname
csv_file="filename.csv";
sed -i -e "s/^/$additional_cols\,/" $csv_file

一旦文件被编辑,它很容易使用COPYpostgres 导入值。使用文档链接COPY

于 2015-12-30T15:42:51.173 回答
0

您可以创建一个临时表,对其进行修改,然后复制回真正的目标表:

# create a temp table with the same structure as dest table, and drop it on commit
CREATE TEMPORARY TABLE temp_dest ON COMMIT DROP AS TABLE dest_table WITH NO DATA;"

COPY temp_dest(col1,col2 ...) FROM '/file/to/data.COPY'

# Do update in temp_dest, only affect the data just copied
UPDATE temp_dest set col_x=x where ...

INSERT INTO dest_table SELECT * FROM temp_dest
于 2021-11-04T09:44:55.527 回答