2012-03-20 50 views
1

我主要是从Sql Server的背景下,并且在使MySql与Microsoft Sync Framework一起工作(即它不适合快照)之后,我不得不查看Postgres并尝试使用Sync Framework进行工作。PostgreSQL等价于Sql服务器@@ DBTS

需要的触发器包括对函数“@@ DBTS”的调用,但是我无法在Postgres中为此找到等效项。

从Microsoft文档这一点,说:

@@DBTS returns the current database's last-used timestamp value. 
A new timestamp value is generated when a row with a timestamp 
column is inserted or updated. 

在MySQL中是以下几点:

USE INFORMATION_SCHEMA; 
SELECT MAX(UPDATE_TIME) FROM TABLES WHERE UPDATE_TIME < NOW(); 

谁能告诉我这是什么将是Postgres的?

+0

IIRC,时间戳在Microsoft有不同的含义。在Postgres中,它们只是普通的“日期+时间”数据类型。您可能需要的序列类型(与rowversioning相关)确实存在,但我认为它们在应用程序级别上并不特别有用。你到底需要他们什么?你想要子交易时间粒度? – wildplasser 2012-03-20 11:04:35

+0

这是所有的同步框架,我已经使用sql服务器配置类正确提供所有表/触发器/存储过程等,我现在试图在Postgres数据库中模仿(因为没有配置类)。它将一个插入到跟踪表中,将“@@ DBTS + 1”放入“local_create_peer_timestamp”列中,并将“GETDATE()”放入“last_change_datetime”列中,以便区分它们,我不想打破他们这样做的任何原因。此外,同步框架中的任何代码都会期望(我假设)数据是以这种格式存在的。 – eyeballpaul 2012-03-20 11:12:22

+1

PostgreSQL在上次修改表时不会跟踪。因此,没有等同于SQL Server的'DBTS',也没有MySQL的UPDATE_TIME' – 2012-03-20 11:22:11

回答

1

当上次修改表时,PostgreSQL不会跟踪。因此,SQL Server的@@DBTS和MySQL的INFORMATION_SCHEMA.TABLES.UPDATE_TIME都没有相应的功能。

您可能也有兴趣在此讨论:

http://archives.postgresql.org/pgsql-general/2009-02/msg01171.php

基本上说:“如果你需要知道当一个表的最后修改,你必须时间戳列添加到每个表记录上次该行更新为“。