Что это значит

Если внутри транзакции одна команда завершилась ошибкой, PostgreSQL помечает всю транзакцию как прерванную и отклоняет все следующие команды этой ошибкой, пока клиент не выполнит ROLLBACK. Поэтому сама эта ошибка ничего не объясняет: причина в первой ошибке транзакции.

Частая картина в журналах: одна настоящая ошибка и за ней десятки current transaction is aborted от той же сессии. Так ведут себя программы, которые не проверяют результат команды и продолжают работу, например инструменты миграции или скрипты, перебирающие варианты запросов.

Как проверить

  1. Найти в журнале PostgreSQL первую ошибку той же сессии перед этой: по номеру процесса в префиксе строки журнала.
  2. Если в журнале нет нужного, включить префикс с идентификатором сессии: log_line_prefix = '%m [%p] %u@%d ' или подобный.

Что сделать

  1. Разбирать первую ошибку, а эти считать её следствием.
  2. В своём коде после ошибки внутри транзакции выполнять ROLLBACK или откатываться к точке сохранения (SAVEPOINT), прежде чем продолжать.