每个 Firebird 数据库修改 CURRENT_TIMESTAMP

Modifying CURRENT_TIMESTAMP per Firebird database

我在同一台服务器上有很多数据库,每个数据库代表不同的时区(太平洋、山区、中部和东部)。现在我的程序使用 'NOW'CURRENT_TIMESTAMP 之类的东西来获取记录的当前时间。这是一个问题。

正在使用 SymmetricDS 将数据从不同的计算机同步到此中央服务器。但是,我遇到的问题是,在这个中央服务器上 运行 的程序编写时就好像它们是办公室本地的一样。这意味着当它调用时间戳时,它会在可能不代表其办公室的服务器的时区执行。结果导致某些数据连续性混乱。

除了检查程序和重写每个使用当前时间的情况之外,我们更愿意找到一种在每个数据库中以不同方式表示时间的方法...以某种方式分别偏移每个数据库中的时区。

我已经尽可能多地阅读了与该主题相关的内容,我有什么选择?

我认为您应该为此任务创建一个过程。

首先,您可以从一个新的 table 开始。让我们使用以下结构:

此外,让我们创建以下存储过程:

create or alter procedure GETTIMESTAMP (
    IOFFICE_ID bigint)
returns (
    RTIMESTAMP timestamp)
as
begin
  RTIMESTAMP=dateadd(hour,coalesce((select TIMEDIFF from OFFICE_TIMEZONE where OFFICE_ID_=:IOFFICE_ID),0), current_timestamp);
  suspend;
end

此程序将return正确的时间。如果办公室不存在,它将return本地服务器的current_timestamp。

当然,将其放入您的数据库需要一些工作。为了方便起见,您可以在数据库元数据中进行搜索。 IBExpert 具有简单的搜索对话框,但您也可以导出元数据并通过记事本进行搜索。