PG迁移必读(九):神秘的Sybase timestamp类型
Barry Chen

前言:在DSU会议上,客户问了个问题:原先Sybase中的timestamp字段,转到PG后是什么类型?存储过程更新数据时,是怎样处理这个字段的?

 

但做了这么多的SP的revamp,都没看到SP源码里有对这个timestamp字段的操作,因此自动将它忽略了。现客户问起,重新研究学习了一下,发现这个timestamp字段是Sybase内部使用的,如果应用程序没有使用到这个字段,则迁移到PG中时可以将它忽略掉。

Sybase timestamp数据类型

在Sybase数据库中,timestamp类型是一个特殊的数据类型,它并不用于存储日期和时间信息,而是用于实现并发控制和版本跟踪。在Sybase中,timestamp数据类型实际上是一个8字节的二进制数值,它会在每次数据行更新时自动递增。这个递增的数值可以用于检测数据的变化,以控制并发访问。

Timestamp的用途

Timestamp数据类型主要用于实现乐观并发控制。当多个用户同时访问数据库并对同一行数据进行修改时,使用timestamp数据类型可以方便地检测到数据的冲突和变化情况。通过比较各个用户读取数据时记录的timestamp值和最新的数据库中的timestamp值,可以判断数据是否发生了变化。

Timestamp的使用限制

  1. 每表唯一:在Sybase中,每个表只能有一个timestamp列。这是因为timestamp用于跟踪每一行的修改顺序,多个timestamp列会导致冲突和混淆。
  2. 不可手动插入:用户不能直接向timestamp列插入非空值。如果尝试插入非空值,数据库会忽略该值,并插入自己的timestamp值。

 

Timestamp与时间类型的区分

尽管timestamp的名称可能会让人误解为存储日期和时间的数据类型,但实际上,在Sybase中,timestamp并不用来存储时间信息。它与datetime或time类型不同,后两者分别用于存储日期和时间信息。

总结

Sybase中的timestamp数据类型用于Sybase内部并发控制和版本跟踪。它通过为每一行数据提供一个唯一的递增值,帮助数据库管理系统识别数据的最新版本,并处理并发更新时的数据冲突。