我已经写了从PostgreSQL数据库到另一个系统,其执行没有问题,我的测试/开发环境,使用同步数据提供了基本的脚本:Npgsql的:不支持时间戳旧的浮点表示
- PostgreSQL的9.4
- DLL Npgsql的版本3.0.3
一旦我们跑在现场生产环境的脚本,我们打以下错误:
"Old floating point representation for timestamps not supported"
研究这个问题,我发现这与“PostgreSQL的不推荐使用的编译时选项有关,该选项切换到某些日期/时间字段的浮点表示。 Npgsql的(目前)不支持这种模式。”
Here is a link to the relevant source code。
在生产中,PostgreSQL服务器正在运行8.3版本,而对于内部原因,服务器管理器已下降到PostgreSQL服务器在这个时候升级(Npgsql的当前版本不正式支持PosgreSQL之前的版本9 DOH!)
问题(S):
- 有什么办法修改的PostgreSQL 8.3 “integer_datetimes” 的conf没有完全重新安装应用程序或 升级?
- 或者,有没有办法将我的Npgsql dll降级到支持此配置设置的旧版本?
- 如有必要,还有其他Npgsql替代方法的建议吗?我正在考虑重构代码以使用ADO.NET(但我不确定是否会推荐)。
降级到Npgsql 2.2.7解决了我遇到的错误“不支持时间戳的旧浮点表示”错误。感谢您的帮助!我完全同意使用PosgreSQL 8.3并不理想,但在这种情况下,我不幸没有任何控制权决定是否升级,并且必须为PostgreSQL 8.3数据库找到一个可行的解决方案。好的一面是,我已经有了一个使用最新Npgsql版本的项目的副本,可以在数据库升级时进行升级。再次感谢你! –
我有一个PostgreSQL 9.3实例,我不控制'integer_datetimes'禁用。 Npgsql 2.2.7适用于时间戳,但是一些数组抛出时,我认为应该使用值类型数组中的空值。升级到3.2.5固定了阵列,但现在时间戳丢失了。为什么删除了时间戳记支持(看起来可能提交'1f140e5')? – ryachza
时间戳支持未被删除 - Npgsql 3.0从读/写值的文本表示切换到二进制,即不是解析人类可读的时间戳表示,而是读取一个简单的二进制值(更高效,更易于维护等)。 )。不幸的是,在非常旧的PostgreSQL版本中,Npgsql不支持默认的二进制表示形式,尽管您仍然可以像上面解释的那样重新编译新的表示形式。 –