如何将自定义枚举类型的数据从 csv 插入现有的 PostgreSQL table
How to insert data with custom enum type from a csv into an existing PostgreSQL table
我想将 csv 文件中的数据插入 PostgreSQL 数据库中的现有 table - 让我们调用 table automobile
.
我的领域之一是自定义 enum
- 我们称它为 brand
。
当我尝试使用 DataGrip 内置功能从 csv 文件导入记录时,我收到一条错误消息:
conversion failed: "Ford" to brand
但在下面的屏幕截图中,我们可以看到 manufacturer
列填充了预期的字符串值:Ford
.
我想我必须明确地将字符串转换为 brand
类型,但我该怎么做呢?我在导入选项中没有看到任何此类选项。 (见下文)。我应该直接在 csv 文件中做吗?
复制步骤
CREATE TYPE brand AS ENUM ('BMW', 'Renault', 'Ford');
您可以检查您是否声明了一个 enum
类型:
SELECT enum_range(NULL::brand);
我创建了一个虚拟 table,其中 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');
现在我尝试通过右键单击我的 table 和 selecting 从文件导入数据... 来从 csv 文件导入数据
我要导入的csv文件select包含以下两行:
id, manufacturer, registration_number, owner
3,Ford,PZB-URU-LK,Jack
我select右边的编码选项点击确定。然后生成错误信息:
2:3: conversion failed: "Ford" to brand
如果我在检查 DataGrip 导入选项时 select 选项 Insert inconvertible 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 理解 Ford
是 brand
enum
的值?
我已经检查过 DataGrip documentation on Import/Export 但找不到我要找的东西。
这是一个错误!我们,DataGrip 团队,将处理这个问题。期待在进一步的次要更新之一中得到修复。
最新的 DataGrip 版本可以按预期处理枚举类型。 The issue 已修复。
我想将 csv 文件中的数据插入 PostgreSQL 数据库中的现有 table - 让我们调用 table automobile
.
我的领域之一是自定义 enum
- 我们称它为 brand
。
当我尝试使用 DataGrip 内置功能从 csv 文件导入记录时,我收到一条错误消息:
conversion failed: "Ford" to brand
但在下面的屏幕截图中,我们可以看到 manufacturer
列填充了预期的字符串值:Ford
.
我想我必须明确地将字符串转换为 brand
类型,但我该怎么做呢?我在导入选项中没有看到任何此类选项。 (见下文)。我应该直接在 csv 文件中做吗?
复制步骤
CREATE TYPE brand AS ENUM ('BMW', 'Renault', 'Ford');
您可以检查您是否声明了一个 enum
类型:
SELECT enum_range(NULL::brand);
我创建了一个虚拟 table,其中 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');
现在我尝试通过右键单击我的 table 和 selecting 从文件导入数据... 来从 csv 文件导入数据 我要导入的csv文件select包含以下两行:
id, manufacturer, registration_number, owner
3,Ford,PZB-URU-LK,Jack
我select右边的编码选项点击确定。然后生成错误信息:
2:3: conversion failed: "Ford" to brand
如果我在检查 DataGrip 导入选项时 select 选项 Insert inconvertible 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 理解 Ford
是 brand
enum
的值?
我已经检查过 DataGrip documentation on Import/Export 但找不到我要找的东西。
这是一个错误!我们,DataGrip 团队,将处理这个问题。期待在进一步的次要更新之一中得到修复。
最新的 DataGrip 版本可以按预期处理枚举类型。 The issue 已修复。