我已经将数据库从SQL Server迁移到PostgreSQL。许多表包含ts
列(timestamp
),它存储rowversion并在SQL服务器中自动生成。
当我将存储过程转换为PostgreSQL时,我发现插入过程失败了,因为ts
列(在PostgreSQL中转换为bytea
)是NOT NULL
,并且在此列中没有插入显式值。
现在,我需要在PostgreSQL中实现相同的功能。我假设将当前日期时间编码到bytea
以某种方式将正常工作。如果有办法实现这一点,请告诉我。
对于时间戳,timestamp with time zone
是最好的数据类型。
如果要自动填充,请将列的DEFAULT
值设置为current_timestamp
。
没有任何东西可以阻止你首先将时间戳输出到text
然后再输入bytea
,但是会有什么方法可以获得?
阅读有关Microsoft SQL Server qazxsw poi数据类型的信息,似乎您想要的只是行版本的唯一标识符,无论何时修改行都会更改。
在PostgreSQL中,无论如何都会自动发生。因此,您不需要特殊的列,只需使用timestamp
和xmin
的组合。两者都是系统列。如果这些数字中的任何一个发生变化,则该行已被修改。