【问题标题】:Postgres equivalent to Sql Servers @@DBTSPostgres 相当于 Sql Servers @@DBTS
【发布时间】:2012-03-20 10:50:30
【问题描述】:

我主要来自 Sql Server 背景,并且在让 MySql 与 Microsoft Sync Framework 一起工作时遇到了一些问题(即它不适合快照),我不得不研究 Postgres 并尝试让它与同步框架。

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

从微软的文档中它说:

@@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 中会是什么?

【问题讨论】:

  • IIRC,时间戳在微软有不同的含义。在 Postgres 中,它们只是普通的“日期+时间”数据类型。您可能想要的序列类型(与行版本控制相关)确实存在,但我认为它们在应用程序级别上并不是特别有用。您究竟需要它们做什么?你想要子交易时间粒度吗?
  • 这都是为了同步框架,我已经使用 sql server 配置类来正确配置所有表/触发器/存储过程等,我现在正在尝试在 Postgres 数据库中模仿它(如没有配置类)。它对跟踪表进行插入,将“@@DBTS + 1”放入“local_create_peer_timestamp”列,并将“GETDATE()”放入“last_change_datetime”列,因此似乎可以区分它们,我不想打破他们这样做的任何原因。此外,同步框架中的任何代码都期望(我假设)数据采用这种格式。
  • PostgreSQL 不会跟踪上次修改表的时间。因此,SQL Server 的 DBTS 和 MySQL 的 UPDATE_TIME 没有等效项
  • 好吧,它将它存储为一个 bigint,所以我不能 100% 确定它在幕后是如何工作的,但它必须稍后对所有这个 bigint 大于 a 的行执行类似 select 的操作值,该值是时间戳的 int 表示形式。 postgres 中是否有办法将当前日期/时间作为数字获取?即这可能是总秒数?我可以看看这是否适用于同步框架?
  • 看来 OP 想要在交易中强加订单。除了触发器的调用顺序(在 Postgres 中按字母顺序排列,顺便说一句),我看不出有任何合理的理由想要这样做。

标签: postgresql microsoft-sync-framework


【解决方案1】:

PostgreSQL 不会跟踪上次修改表的时间。因此,SQL Server 的 @@DBTS 和 MySQL 的 INFORMATION_SCHEMA.TABLES.UPDATE_TIME 都没有等价物。

您也可能对此讨论感兴趣:

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

本质上说:“如果您需要知道上次修改表的时间,则必须向每个表添加一个时间戳列,以记录该行上次更新的时间”。 p>

【讨论】:

    猜你喜欢
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多