Не удается обновить материализованный вид с помощью ormlite

#servicestack #ormlite-servicestack

#servicestack #ormlite-servicestack

Вопрос:

Я обновил ServiceStack до последней версии в проекте, и теперь эта строка, похоже, вызывает у меня проблемы:

 _db.ExecuteNonQuery("REFRESH MATERIALIZED VIEW product_book;");
  

Он генерирует эту ошибку в журналах:

 2020-08-25 23:14:26.8896||DEBUG|OrmLiteResultsFilterExtensions|SQL: REFRESH MATERIALIZED VIEW product_book; |url: |action: 
2020-08-25 23:17:19.6129||ERROR|ImportBookHelper|Error reading xml Npgsql.PostgresException (0x80004005): 42P01: relation "product_book" does not exist
   at Npgsql.NpgsqlConnector.<>c__DisplayClass160_0.<<DoReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlConnector.<>c__DisplayClass160_0.<<DoReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:projectsnpgsqlsrcNpgsqlNpgsqlConnector.cs:line 973
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:projectsnpgsqlsrcNpgsqlNpgsqlDataReader.cs:line 449
   at Npgsql.NpgsqlDataReader.NextResult() in C:projectsnpgsqlsrcNpgsqlNpgsqlDataReader.cs:line 298
   at Npgsql.NpgsqlCommand.ExecuteReaderAsync(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:projectsnpgsqlsrcNpgsqlNpgsqlCommand.cs:line 1178
   at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken) in C:projectsnpgsqlsrcNpgsqlNpgsqlCommand.cs:line 977
   at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:projectsnpgsqlsrcNpgsqlNpgsqlCommand.cs:line 959
   at ServiceStack.OrmLite.OrmLiteResultsFilterExtensions.ExecNonQuery(IDbCommand dbCmd, String sql, Object anonType) in C:BuildAgentwork27e4cc16641be8c0srcServiceStack.OrmLiteOrmLiteResultsFilterExtensions.cs:line 32
   at ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func`2 filter) in C:BuildAgentwork27e4cc16641be8c0srcServiceStack.OrmLiteOrmLiteExecFilter.cs:line 64
  Exception data:
    Severity: ERROR
    SqlState: 42P01
    MessageText: relation "product_book" does not exist
    File: namespace.c
    Line: 407
    Routine: RangeVarGetRelidExtended|url: |action: 
  

Я попытался запустить REFRESH MATERIALIZED VIEW product_book; в консоли postgresql, и он работает нормально. Я также пытался использовать ExecuteSql() , но всегда одна и та же проблема.

Он говорит, что отношение не существует, но оно существует. Кроме того, строка подключения определенно относится к нужной базе данных, и она может нормально читать / записывать.

Раньше это работало, но теперь, похоже, перестало работать, и я не могу понять, почему.

Ответ №1:

Это не будет проблемой с ORMLite, который просто отправляет SQL как есть в Npgsql ADO.NET поставщик, который возвращает ошибку сервера PostgreSQL.

По какой-то причине строка подключения не имеет видимости или доступа к вашему product_book материализованному виду, некоторые потенциальные проблемы могут заключаться в том, что у пользователя может не быть доступа к нему, или он находится в другой схеме.

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

1. @Guerrilla попробуйте использовать vanilla ADO.NET скорее всего, вы получите тот же результат