问题描述
我已经将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
实例化视图,因此可能存在一些潜在的问题,即用户可能无法访问它,或者它位于其他模式中。