1

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

4

1 回答 1

1

你可以使用 PostgreSQL 的COPY

根据文档:

COPY 在 PostgreSQL 表和标准文件系统文件之间移动数据。COPY TO 将表的内容复制到文件,而 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'

要注意的另一件事是空值,在导出时,如果某些字段为空,那么 PostgreSQL 将添加 ' /N' 来表示空字段,这很好,但如果您尝试在 SQL 服务器中导入该数据可能会导致问题。

一个快速的解决方法是通过在导出的 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
于 2016-01-25T11:14:35.470 回答