Apache NiFi: сбой инструкции INSERT, вызванный ОГРАНИЧЕНИЕМ NOT NULL

#sql #postgresql #apache-nifi

#sql #postgresql #apache-nifi

Вопрос:

У меня есть JSON

 {
  "username" : "ChokkiAST",
  "login_date" : "2021-01-15",
  "active": true
}
 

Я хочу INSERT поместить эти данные в таблицу базы данных со структурой:

 CREATE TABLE web.accounts_activity (
    username text NOT NULL,
    login_date date NOT NULL,
    active bool NULL DEFAULT false,
    id SERIAL NOT NULL,
    CONSTRAINT web.accounts_activity_username_key UNIQUE (username),
    CONSTRAINT cabinet_account_pkey PRIMARY KEY (id)
);
 

Мой JSON не содержит id поля, потому что база данных должна автоматически генерировать значения (я выполняю перенос из кода Spring JPA). Я попробовал PutDatabaseRecord с INSERT помощью инструкции with и получил ошибку: CONSTRAINT ERROR: value NULL at column "id" . Попробовал с UPSERT помощью инструкции — та же ошибка.

Также я попытался использовать PutSQL процессор со следующим SQL-скриптом (значения из атрибутов):

 INSERT INTO web.accounts_activity (username, login_date, active, id)
VALUES (${username}, ${login.date}, ${is.active}, DEFAULT);
 

И я получил ошибку:

 ERROR:  current transaction is aborted, commands ignored until end of transaction block
 

Итак, как точно вставить это id с помощью Apache NiFi?

Ответ №1:

id Полностью удалить из списков столбцов и значений. Он автоматически сгенерирует значение, вот как serial это работает.

 INSERT INTO web.accounts_activity (username, login_date, active)
VALUES (${username}, ${login.date}, ${is.active});
 

Комментарии:

1. Это не помогло. Все еще ошибка: ERROR: current transaction is aborted, commands ignored until end of transaction block

2. Может ли это быть прервано предыдущей операцией DB?

3. Я попытался добавить это через DBeaver, и он работает нормально, ошибок нет. Похоже, что Apache NiFi делает что-то неправильно.