#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 делает что-то неправильно.