Я хочу вставить данные из CSV-файла в существующую таблицу в базе данных PostgreSQL - назовем таблицу automobile
.
Одно из моих полей - это пользовательское enum
- назовем его brand
.
Когда я пытаюсь импортировать записи из CSV-файла с помощью встроенной функции DataGrip, я получаю сообщение об ошибке:
conversion failed: "Ford" to brand
Тем не менее, на следующем снимке экрана мы видим, что столбец manufacturer
заполнен ожидаемым строковым значением: Ford
.
Полагаю, мне нужно явно привести строку как тип brand
, но как я могу это сделать? Я не вижу никаких опций такого рода в опциях импорта. (увидеть ниже). Должен ли я сделать это непосредственно в CSV-файле?
Шаги воспроизведения
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 по импорту / экспорту , но не смог найти то, что искал.