繁体   English   中英

运算符不存在:@timestamp without time zone

[英]operator does not exist: @ timestamp without time zone

在通过 dotConnect 7.7.832 .NET 连接器从 c# 代码向 PostgreSQL 10.14 发出的参数化查询中,如果参数为 NULL,我选择参数值或本地时间戳:

using (var cmd = new PgSqlCommand("select COALESCE(@eventTime, LOCALTIMESTAMP)", connection)

执行时,此语句会在主题中引发错误。 如果我注释掉相应的参数

cmd.Parameters.Add("@eventTime", PgSqlType.TimeStamp).Value = DateTime.Now;

和硬编码

using (var cmd = new PgSqlCommand("select COALESCE('11/6/2020 2:36:58 PM', LOCALTIMESTAMP)", connection)

或者如果我投了参数

using (var cmd = new PgSqlCommand("select COALESCE(cast(@eventTime as timestamp without time zone), LOCALTIMESTAMP)", connection)

那么它的工作原理。 任何人都可以解释错误中的@运算符所指的内容以及错误的原因?

在不起作用的情况下,您的 .Net 连接库似乎将包含文字@的 SQL 命令传递给数据库,而不是替换它。 数据库假定您尝试使用@作为用户定义的运算符,因为它不知道还有什么可能是。 但是没有定义这样的运算符。

为什么要这样做? 我不知道。 这是关于您的 .Net 连接库的问题,而不是关于 PostgreSQL 本身的问题,因此您可能需要添加标签。

您从数据库获得的错误消息应包括它收到的查询文本(与您认为已发送的文本相反),并且在这种情况下查看它通常很有用。 如果客户端的错误消息中不存在该文本(某些连接库不会忠实地传递此信息),您应该能够直接从 PostgreSQL 服务器的日志文件中提取它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM