Почему процесс запуска HangFire завершается с этой ошибкой?

#postgresql #hangfire

#postgresql #hangfire

Вопрос:

Мы видим эту ошибку при запуске процесса, который использует HangFire (1.6.22) и PostgreSQL.

 2019-03-19 00:12:45,406 [1] ERROR
Hangfire.PostgreSql.PostgreSqlStorage [(null)] - Error while executing install/upgrade Npgsql.PostgresException (0x80004005): 42701: column "updatecount" of relation "lock" already exists
    at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
    at Npgsql.NpgsqlDataReader.<NextResult>d__46.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at Npgsql.NpgsqlDataReader.NextResult()
    at Npgsql.NpgsqlCommand.<ExecuteDbDataReader>d__100.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at Npgsql.NpgsqlCommand.<ExecuteNonQuery>d__92.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
    at Npgsql.NpgsqlCommand.ExecuteNonQuery()
  

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

1. Итак, в каком операторе выполняется Npgsql.NpgsqlCommand.ExecuteNonQuery() ?

2. Понятия не имею, это из HangFire framework (или из HangFire PostgreSQL dll).

3. Нам просто нужно запустить сервер HnagFire, даже без запуска / планирования какого-либо задания, которое создает эту ошибку, при запуске .

Ответ №1:

исправлено. Это может помочь другим, что мы и сделали.

Реальная проблема заключалась в том, что когда мы создавали таблицы для HangFire, они создавались с использованием SQL-скриптов, доступных в исходном репозитории. И при запуске кода он обнаружил некоторое несоответствие и автоматически попытался обновить таблицы базы данных, но потерпел неудачу.

Итак, мы удалили все таблицы и позволили HangFire создавать таблицы при первом запуске. Теперь работает нормально.