通过ODBC从Oracle访问postgresql的timestamp字段会导致精度损失,以微秒为单位

时间:2018-01-25 02:51:35

标签: oracle postgresql timestamp odbc dblink

我试图通过ODBC从Oracle访问PostgreSQL记录,当我尝试读取时间戳字段时存在严重问题,时间精度(以微秒为单位)已丢失。例如:在PostgreSQL中 2018-01-25 12:40:20.123456 将在Oracle中 2018-01-25 12:40:20.000000 。为了确保,我已经编写PL / SQL来检查数据,不知何故,所有微秒数字都已丢失。

有一个文档讨论连接字符串的参数 BTD - BIND TIMESTAMP作为日期 link

默认情况下,此参数应为“FALSE”

  

将TIMESTAMP绑定为DATE(BTD连接字符串)

     

添加了新的连接选项,将TIMESTAMP绑定为DATE,允许您将ODBC驱动程序SQL_TIMESTAMP数据类型绑定到Oracle DATE数据类型而不是Oracle TIMESTAMP数据类型(这是默认值)。

这是我的PL / SQL:

isql

结果是: 19 / JAN / 18 08:59:42.000000 AM ,它缺少微秒,所有6位数的第二部分已被替换为零。

另一方面,在我的PostgreSQL上,结果是“2018-01-19 08:59:42.695166”

我也测试了MyAnnotations,它以完整的精度返回时间戳值,因此,我认为主要原因来自Oracle。

1 个答案:

答案 0 :(得分:1)

Oracle DATE数据类型不支持几分之一秒。你需要使用TIMESTAMP。这也适用于PostgreSQL时间戳进入的任何表列或PL / SQL数据类型;如果时间戳在某处传递到DATE,则会截断几分之一秒。