是否有与 sql server 的 openquery 或 openrowset 等效的查询在 postgresql 中用于从 excel 或 csv 查询?
问问题
2724 次
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 回答