无法使用Ormlite刷新物化视图

问题描述

我已经将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:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 973
--- End of stack trace from prevIoUs location where exception was thrown ---
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async,Boolean isConsuming) in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 449
   at Npgsql.NpgsqlDataReader.NextResult() in C:\projects\npgsql\src\Npgsql\NpgsqlDataReader.cs:line 298
   at Npgsql.NpgsqlCommand.ExecuteReaderAsync(CommandBehavior behavior,Boolean async,CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1178
   at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async,CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 977
   at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 959
   at ServiceStack.Ormlite.OrmliteResultsFilterExtensions.ExecNonQuery(IDbCommand dbCmd,String sql,Object anonType) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.Ormlite\OrmliteResultsFilterExtensions.cs:line 32
   at ServiceStack.Ormlite.OrmliteExecFilter.Exec[T](IDbConnection dbConn,Func`2 filter) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.Ormlite\OrmliteExecFilter.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: 

我尝试在Postgresql控制台中运行REFRESH MATERIALIZED VIEW product_book;,并且运行正常。我也尝试过使用Executesql(),但始终是同样的问题。

它说关系不存在,但确实存在。另外,连接字符串绝对是正确的数据库,它可以读写。

这曾经可以工作,但是现在看来已经停止工作了,我不知道为什么。

解决方法

OrmLite不会有任何问题,它只是将SQL原样发送到Npgsql ADO.NET提供程序,该提供程序将返回服务器PostgreSQL错误。

由于某种原因,连接字符串不可见或无法访问您的product_book实例化视图,因此可能存在一些潜在的问题,即用户可能无法访问它,或者它位于其他模式中。