每个Firebird数据库修改CURRENT_TIMESTAMP

时间:2015-10-08 16:40:22

标签: timestamp firebird firebird2.5 symmetricds

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

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

除了通过程序并重写利用当前时间的每种情况之外,我们更愿意找到一种方法来在每个数据库中以不同方式表示时间...以某种方式单独抵消每个数据库中的时区。

尽可能多地阅读与此主题相关的阅读内容,我有哪些选择?

1 个答案:

答案 0 :(得分:1)

我认为你应该为这个任务创建一个程序。

首先,你可以从一个新表开始。我们使用以下结构:Basic office database

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

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

此过程将返回正确的时间。如果办公室没有存在,它将返回本地服务器的current_timestamp。

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