2016-01-25 58 views
0

查询是否等同于sql server的openquery或openrowset用于postgresql从excel或csv中查询?相当于PostgresQL的SQL服务器Openquery

+0

http://www.postgresql.org/docs/9.4/static/sql-copy.html,或http://pgoledb.com/? –

+0

复制命令为我工作谢谢 –

+0

您也可以使用外国数据包装直接读​​取文件,而无需导入它 –

回答

1

您可以使用PostgreSQL的COPY

按照Doc:在PostgreSQL表和标准文件系统 文件之间

COPY移动数据。 COPY将表中的内容复制到文件中,而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运行任何上述前面提到的命令。

要设置CLIENT_ENCODING参数PostgreSQL中

set client_encoding to 'UTF8' 

set client_encoding to 'latin1' 

另一个要警惕的是空值,而出口,如果某些字段为空,则PostgreSQL将添加“/N”代表一个空字段,这是很好,但如果你试图导入SQL Server中的数据,可能会导致问题。

速战速决是你会在导出CSV

COPY (select * from tblemployee) TO '~/exp_tblemployee.csv' DELIMITERS ',' NULL as E''; 

另一个常见的需求是进口或出口用的标题更喜欢作为一个空占位符指定修改导出命令。

将CSV导入到带表头的表格中以获取csv文件第一行中存在的列。

COPY tblemployee FROM '~/empsource.csv' DELIMITERS ',' CSV HEADER 

将表格导出为CSV,其中头部出现在第一行。

COPY (select * from tblemployee) TO '~/exp_tblemployee.csv' DELIMITERS ',' CSV HEADER