是否有相当于sql server的openquery或openrowset的查询在postgresql中用于从excel或csv查询?
答案 0 :(得分:1)
您可以使用PostgreSQL的COPY
根据文件:
COPY在PostgreSQL表和标准文件系统之间移动数据 文件。 COPY将复制表格的内容复制到文件中 FROM将数据从文件复制到表(将数据附加到 表中已有的东西)。 COPY TO也可以复制结果 SELECT查询
COPY的工作原理如下:
从CSV导入表格
假设您已经有一个具有正确列的表,则命令如下
COPY tblemployee FROM '~/empsource.csv' DELIMITERS ',' CSV;
从表中导出CSV。
COPY (select * from tblemployee) TO '~/exp_tblemployee.csv' DELIMITERS ',' CSV;
在此重要的是,一般来说,如果您的数据是unicode或需要严格的编码,那么在运行任何上述命令之前,请始终设置client_encoding。
在PostgreSQL中设置CLIENT_ENCODING参数
set client_encoding to 'UTF8'
或
set client_encoding to 'latin1'
要防范的另一件事是nulls,在导出时,如果某些字段为null,那么PostgreSQL将添加“/N
”来表示空字段,这很好,但如果您尝试导入该字段可能会导致问题SQL服务器中的数据。
快速修复是通过在导出的CSV
中指定您希望作为空占位符的内容来修改导出命令COPY (select * from tblemployee ) TO '~/exp_tblemployee.csv' DELIMITERS ',' NULL as E'';
另一个常见要求是使用标题导入或导出。
将CSV导入到带有Header的表中,以显示csv文件第一行中的列。
COPY tblemployee FROM '~/empsource.csv' DELIMITERS ',' CSV HEADER
将表格导出为CSV,第一行显示标题。
COPY (select * from tblemployee) TO '~/exp_tblemployee.csv' DELIMITERS ',' CSV HEADER