Npgsql:不支持时间戳的旧浮点表示

时间:2015-12-14 18:38:56

标签: c# postgresql floating-point npgsql

我编写了一个基本脚本,将PostgreSQL数据库中的数据同步到另一个系统,该系统在我的测试/开发环境中执行,没有问题,使用:

  • PostgreSQL 9.4
  • Npgsql dll 3.0.3版

在实时制作环境中运行脚本后,我们遇到以下错误:

  

“不支持时间戳的旧浮点表示”

研究这个问题,我发现这与PostgreSQL的一个“弃用的编译时选项”有关,后者切换到某些日期/时间字段的浮点表示.Npgsql(当前)不支持这种模式。“

Here is a link to the relevant source code

在生产中,PostgreSQL服务器运行的是8.3版,由于内部原因,服务器管理器此时拒绝升级PostgreSQL服务器。 (当前的Npgsql版本在版本9. doh之前没有正式支持PosgreSQL!)

问题(S):

  • 有没有办法修改PostgreSQL 8.3“integer_datetimes” 配置设置没有完全重新安装应用程序或 升级?
  • 或者,有没有办法将我的Npgsql dll降级到支持此配置设置的旧版本?
  • 如有必要,是否有替代Npgsql的建议?我正在考虑重构代码以使用ADO.NET(但我不确定是否会推荐这样做。)

3 个答案:

答案 0 :(得分:0)

根据这里的一个主题:

http://grokbase.com/t/postgresql/pgsql-general/103f2g9gsr/integer-datetime-8-2-8-4-differences

我注意到这可能对您有所帮助:

  

&#34下列出的第一项;观察以下不兼容性"   在8.4发行说明中是

     

默认情况下使用64位整数日期时间(Neil Conway)

     

以前这是由configure'选择的   --enable-integer-datetimes选项。要保留旧行为,请使用--disable-integer-datetimes构建。

也许这有助于弄清楚如何禁用/启用整数日期。

你在使用什么版本的Postgre-SQL?

答案 1 :(得分:0)

我不是百分之百确定这一点,但是Npgsql 2.2.7应该能够与PostgreSQL传统浮点格式一起正常工作,因为它使用文本传输来读写非二进制值。这应该允许您与旧数据库进行交互。

然而,严重劝阻继续以任何方式使用PostgreSQL 8.3 - 8.3在2013年2月达到其生命周期结束时...您应该尝试通过转储数据并将其恢复到新的数据来迁移到9.4环境,它可能会很好。

另请注意,虽然新版本(如3.0.4)通常可以在9.0之前的PostgreSQL上运行 - 但它只是因为它们没有以任何方式进行测试,我们可能无法修复任何非平凡的错误。跑过去。

答案 2 :(得分:0)

Npgsql,ASP.NET Core 2.2:System.NotSupportedException:不建议使用 Npgsql不支持浮点日期/时间格式。

大家好!我在使用asp.net core 2.2时遇到了这个问题。就我而言,我降级到Npgsql版本4.0.7,这解决了我的问题。