将 csv 文件的几列复制到表格中 [英] Copy a few of the columns of a csv file into a table

查看:23
本文介绍了将 csv 文件的几列复制到表格中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含 10 列的 CSV 文件.创建 4 列 PostgreSQL 表后,我想将 10 列中的一些复制到表中.

I have a CSV file with 10 columns. After creating a PostgreSQL table with 4 columns, I want to copy some of 10 columns into the table.

我的 CSV 表的列如下:

the columns of my CSV table are like:

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10

我的 PostgreSQL 表的列应该是这样的:

the columns of my PostgreSQL table should be like:

x2 x5 x7 x10

推荐答案

如果是临时任务

用输入文件中的所有列创建一个临时表

If it is an ad hoc task

Create a temporary table with all the columns in the input file

create temporary table t (x1 integer, ... , x10 text)

从文件复制到其中:

copy t (x1, ... , x10)
from '/path/to/my_file'
with (format csv)

现在从临时表插入最终表:

Now insert into the definitive table from the temp:

insert into my_table (x2, x5, x7, x10)
select x2, x5, x7, x10
from t

然后放下它:

drop table t

如果是频繁的任务

使用 file_fdw 扩展.作为超级用户:

If it is a frequent task

Use the file_fdw extension. As superuser:

create extension file_fdw;

create server my_csv foreign data wrapper file_fdw;

create foreign table my_csv (
    x1 integer,
    x2 text,
    x3 text
) server my_csv
options (filename '/tmp/my_csv.csv', format 'csv' )
;

将表的选择权限授予将要读取它的用户:

Grant select permission on the table to the user who will read it:

grant select on table my_csv to the_read_user;

然后在必要时直接从 csv 文件中读取,就像它是一个表格一样:

Then whenever necessary read directly from the csv file as if it were a table:

insert into my_table (x2)
select x2
from my_csv
where x1 = 2

这篇关于将 csv 文件的几列复制到表格中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆