SQL Server Openquery等同于PostgresQL

时间:2016-01-25 10:50:10

标签: postgresql postgresql-9.3 postgresql-copy

是否有相当于sql server的openquery或openrowset的查询在postgresql中用于从excel或csv查询?

1 个答案:

答案 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