postgresql的copy命令如何将csv中的引号转换成null插入?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql的copy命令如何将csv中的引号转换成null插入?相关的知识,希望对你有一定的参考价值。

postgresql中“”和null是不同的。
csv中的数据全是带有双引号的,空数据就是一对引号。
用copy命令导入到postgresql中的时候会把“”当一个空字符串插入到数据库,而我想要的是把“”转换成数据库中的空(null)插入。
csv数据中的“”是不可以去掉的;因为数据中往往会有逗号的,如果没有引号的话多一个逗号就多一个列,插入的时候就会出错。
希望大神帮忙。。。
.

参考技术A 这个好像我弄过 好像有2中方法 一种是你从别的数据库导出csv的话你可以加一个限制 好像是什么 with 。。。。 你查一下copy的说明, 第二种你可以copy进去 然后用update 字段 甚至你可以把这个字段删掉 然后再添加成NULL default 的都行吧

如何将表数据从 PostgreSQL (pgAdmin) 导出到 CSV 文件?

【中文标题】如何将表数据从 PostgreSQL (pgAdmin) 导出到 CSV 文件?【英文标题】:How to export table data from PostgreSQL (pgAdmin) to CSV file? 【发布时间】:2019-05-15 14:14:59 【问题描述】:

我正在使用 pgAdmin 4.3 版,我想将一个表数据导出到 CSV 文件。我使用了这个查询

COPY (select * from product_template) TO 'D:\Product_template_Output.csv' DELIMITER ',' CSV HEADER;

但它显示错误

相对路径不允许使用 COPY 到文件

请问如何解决这个问题?

【问题讨论】:

【参考方案1】:

在查询编辑器中,执行查询后,您只需单击“下载为 CSV (F8)”按钮或使用 F8 键。

来源pgAdmin 4 Query Toolbar

【讨论】:

【参考方案2】:

使用绝对路径或 cd 到已知位置,这样您就可以忽略该路径。 例如 cd 进入 documents 目录,然后在那里运行命令。

如果您能够 cd 进入您的 documents 目录,那么命令将是这样的:

假设您想从命令行使用 PSQL。 cd ~/Documents && psql -h host -d dbname -U user

\COPY (select * from product_template) TO 'Product_template_Output.csv' DELIMITER ',' CSV HEADER;

结果将是您当前工作目录(Documents 文件夹)中的 Product_template_Output.csv

再次使用 psql

【讨论】:

\COPYCOPY 好,因为\COPY 也适用于普通用户。【参考方案3】:

试试这个命令:

COPY (select * from product_template) TO 'D:\Product_template_Output.csv' WITH CSV;

【讨论】:

【参考方案4】:

你必须删除双引号:

COPY (select * from product_template) TO 'D:\Product_template_Output.csv'
   DELIMITER ',' CSV HEADER;

【讨论】:

以上是关于postgresql的copy命令如何将csv中的引号转换成null插入?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:将数据导出到 csv 文件

在 PostgreSQL 中使用 COPY FROM 命令在多个表中插入

如何从 CSV 为 PostgreSQL 副本生成模式

PostgreSQL COPY 附加页眉 - csv 中的页脚行

将压缩的 CSV 文件导入 PostgreSQL

PSQL /copy : 变量替换不起作用 | PostgreSQL 11