如何将csv中具有自定义枚举类型的数据插入现有PostgreSQL表

如何将csv中具有自定义枚举类型的数据插入现有PostgreSQL表,sql,postgresql,csv,enums,datagrip,Sql,Postgresql,Csv,Enums,Datagrip,我想将csv文件中的数据插入到PostgreSQL数据库中的现有表中—我们将该表称为automobile 我的一个字段是自定义的enum——我们称它为品牌 CREATE TABLE automobile ( id int, manufacturer brand, registration_number varchar(10), owner varchar(50)); 当我尝试使用DataGrip内置功能从csv文件导入记录时,收到一条错误消息: conversion failed: "Ford

我想将csv文件中的数据插入到PostgreSQL数据库中的现有表中—我们将该表称为
automobile

我的一个字段是自定义的
enum
——我们称它为
品牌

CREATE TABLE automobile (
id int,
manufacturer brand,
registration_number varchar(10),
owner varchar(50));
当我尝试使用DataGrip内置功能从csv文件导入记录时,收到一条错误消息:

conversion failed: "Ford" to brand
然而,在下面的屏幕截图中,我们可以看到
制造商
列填充了预期的字符串值:
Ford

我想我必须显式地将字符串转换为
品牌
类型,但我如何才能做到这一点?我在导入选项中没有看到任何此类选项。(见下文)。我应该直接在csv文件中执行吗

复制步骤

CREATE TYPE brand AS ENUM ('BMW', 'Renault', 'Ford');
您可以使用以下选项检查是否已声明
enum
类型:

SELECT enum_range(NULL::brand);
我创建了一个虚拟表,其中
制造商
列的类型为
品牌

CREATE TABLE automobile (
id int,
manufacturer brand,
registration_number varchar(10),
owner varchar(50));
并在其中插入一些虚拟记录:

INSERT INTO automobile (id, manufacturer, registration_number, owner)
VALUES (1, 'BMW', 'AAA-BBB-ZR', 'John'),
       (2, 'Renault', 'CCC-BWB-PU', 'Mike');
现在,我尝试从csv文件导入数据,方法是右键单击我的表并选择“从文件导入数据…”。。。 我选择导入的csv文件包含以下两行:

id, manufacturer, registration_number, owner
3,Ford,PZB-URU-LK,Jack
我选择正确的编码选项并单击OK。然后生成一条错误消息:

2:3: conversion failed: "Ford" to brand
如果在选中DataGrip导入选项时选择Insert Inconvertable values as Null选项,则会收到一条更详细的错误消息:

2:1: ERROR: column "manufacturer" is of type brand but expression is of type character varying   Hint: You will need to rewrite or cast the expression.   Position: 90
我试图在csv中指定Ford::brand并重新加载,但也遇到了同样的问题

我如何让DataGrip理解
福特
品牌
枚举
的价值


我已经检查过了,但找不到我要找的东西。

那是个bug!我们,DataGrip团队,将处理这个问题。希望在进一步的小更新中修复


请关注以下问题:

最新的DataGrip版本按预期处理枚举类型。是固定的


datagrip导入工具可能比它应该做的更多(甚至更糟)。使用本机工具psql,您可以使用
\copy automobile from'/path/to/myfile.csv'(格式csv,header)
轻松导入文件。查看Datagrip将您的csv文件转换成的内容将非常有用。此信息可以在Postgresql日志文件中找到。