Как вставить данные с пользовательским типом enum из csv в существующую таблицу PostgreSQL - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу вставить данные из CSV-файла в существующую таблицу в базе данных PostgreSQL - назовем таблицу automobile.

Одно из моих полей - это пользовательское enum - назовем его brand.

Когда я пытаюсь импортировать записи из CSV-файла с помощью встроенной функции DataGrip, я получаю сообщение об ошибке:

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-файл, который я выбираю для импорта, содержит следующие 2 строки:

id, manufacturer, registration_number, owner
3,Ford,PZB-URU-LK,Jack

Я выбираю правильный вариант кодирования и нажимаю ОК. Затем генерируется сообщение об ошибке:

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

Если я выберу опцию Вставить необратимые значения как Ноль при проверке опции импорта DataGrip, я получу более подробное сообщение об ошибке:

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

Я попытался указать Ford :: brand в моем csv и перезагрузить компьютер, и у меня возникла та же проблема.

Как я могу заставить DataGrip понять, что Ford является значением brand enum?

Я уже проверил документацию DataGrip по импорту / экспорту , но не смог найти то, что искал.

1 Ответ

0 голосов
/ 04 сентября 2018

Это ошибка! Мы, команда DataGrip, справимся с этим. Ожидайте исправления в одном из следующих незначительных обновлений.

Пожалуйста, следуйте за вопросом: https://youtrack.jetbrains.com/issue/DBE-7012

...