«ОШИБКА: неверный синтаксис ввода для числового типа: NULL» postgresql

Я начинаю изучать sql в porstgresql. Я создал таблицу с числовой (6,2) структурой и пытаюсь импортировать данные. Но в данных есть строка со значением NULL. Теперь я получаю сообщение «ОШИБКА: неверный синтаксис ввода для числового типа: NULL». Теперь у меня есть как минимум 20 столбцов, содержащих это значение NULL.

Что мне делать в такой ситуации? Должен ли я изменить весь столбец вручную или можно сделать это автоматически для всего столбца?

CREATE TABLE ireland_income_gap_bonus (
    id_c smallint,
    companyName text, companies_ID smallint, 
    meanBonus numeric(6,2),
    meanHourly numeric(6,2),
    medianBonus numeric(6,2),
    medianHourly numeric(6,2),
    reportLink text,
    year_ smallint,
    meanHourlyPT numeric(6,2),
    medianHourlyPT numeric(6,2),
    meanHourlyTemp numeric(6,2),
    medianHourlyTemp numeric(6,2),
    perBonusFemale numeric(6,2),
    perBonusMale numeric(6,2),
    perBIKFemale numeric(6,2),
    perBIKMale numeric(6,2),
    pb1Female numeric(6,2),
    pb1Male numeric(6,2),
    pb2Female numeric(6,2),
    pb2Male numeric(6,2),
    pb3Female numeric(6,2), 
    pb3Male numeric(6,2),
    pb4Female numeric(6,2), 
    pb4Male numeric(6,2),
    perEmployeesFemale numeric(6,2),
    perEmployeesMale numeric(6,2),
    commentss text
    
)

Затем,

COPY ireland_income_gap_bonus
FROM 'E:\Programming\SQL\Project\Data\Ireland_gender_pays_gap\Ireland_gpg.CSV'
WITH (FORMAT CSV, HEADER)

Return messages, 

ОШИБКА: неверный синтаксис ввода для числового типа: «NULL» КОНТЕКСТ: КОПИРОВАТЬ ireland_income_gap_bonus, строка 2, столбец «meanhourlypt»: «NULL»

Состояние SQL: 22P02

Используйте опцию NULL

clamp 02.09.2024 16:47

Похоже, что ваш CSV действительно содержит строку NULL. Эту строку, конечно, нельзя преобразовать в числовое значение. Если да, то ваша проблема в плохих данных. Вам необходимо очистить исходный файл. Нулевое значение в CSV-файле обычно представляется в виде последовательных запятых (,,).

Belayer 02.09.2024 19:21
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использование метакоманды psql and it COPY\copy и параметра NULL, описанного здесь КОПИРОВАТЬ:

cat test.csv 
id,val
1,test
2,test2
3,null

create table csv_test (id integer, val varchar);

\copy csv_test from test.csv with csv header null 'null';
COPY 3

\pset null 'NULL'
Null display is "NULL".

select * from csv_test ;
 id |  val  
----+-------
  1 | test
  2 | test2
  3 | NULL

Проблема в том, что предполагается, что все значения NULL представлены 'null'. Если null также представлен NULL, пустой строкой без кавычек или каким-либо другим значением, они не будут преобразованы при импорте, как в:

cat test.csv 
id,val
1,test
2,test2
3,null
4,NULL

\copy csv_test from test.csv with csv header null 'null';
COPY 4

\pset null 'REAL NULL'
Null display is "REAL NULL".

select * from csv_test ;
 id |    val    
----+-----------
  1 | test
  2 | test2
  3 | REAL NULL
  4 | NULL
Ответ принят как подходящий

Чтобы рассматривать строку NULL в CSV как нулевое значение, используйте опцию NULL 'null_string' в COPY (задокументировано здесь):

COPY ireland_income_gap_bonus
FROM 'E:\Programming\SQL\Project\Data\Ireland_gender_pays_gap\Ireland_gpg.CSV'
WITH (FORMAT CSV, HEADER, NULL 'NULL')

Другие вопросы по теме