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

问题描述 投票:2回答:1

我想将csv文件中的数据插入到PostgreSQL数据库的现有表中 - 让我们调用表automobile

我的一个领域是定制的enum - 我们称之为brand

当我尝试使用DataGrip内置功能从csv文件导入记录时,我收到一条错误消息:

conversion failed: "Ford" to brand

然而在下面的屏幕截图中,我们可以看到manufacturer列填充了预期的字符串值:Ford

我想我必须明确地将字符串转换为brand类型,但我该怎么做呢?我在导入选项中没有看到任何此类选项。 (见下文)。我应该直接在csv文件中执行此操作吗?

DataGrip CSV import option

复制步骤

CREATE TYPE brand AS ENUM ('BMW', 'Renault', 'Ford');

您可以检查您是否声明了enum类型:

SELECT enum_range(NULL::brand);

我创建了一个虚拟表,其中manufacturer列的类型为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

我选择了正确的编码选项并单击“确定”。然后生成错误消息:

2:3: conversion failed: "Ford" to brand

如果我在检查DataGrip导入选项时选择Insert inconvertible values为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明白Fordbrand enum的值?

我已经检查过DataGrip documentation on Import/Export但找不到我要找的东西。

sql postgresql csv enums datagrip
1个回答
0
投票

那是一个错误!我们DataGrip团队将处理这个问题。期待修复其中一个进一步的小更新。

请关注问题:https://youtrack.jetbrains.com/issue/DBE-7012

© www.soinside.com 2019 - 2024. All rights reserved.