2012-03-20 90 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

基本上說:「如果你需要知道當一個表的最後修改,你必須時間戳列添加到每個表記錄上次該行更新爲「。