gpt4 book ai didi

postgresql - 计划将数据从 dblink 插入到本地表中

转载 作者:行者123 更新时间:2023-11-29 13:06:10 26 4
gpt4 key购买 nike

我正在尝试使用 dblink 将远程数据库链接到本地​​数据库。这里想要实现的是:

  1. 我只想每 10 秒从远程数据库中的表中获取最新行的数据。

  2. 我希望将数据插入到本地数据库中的预先存在的表中。在这种情况下,我希望将从远程数据库中收集的数据以及其他一些数据(例如主键)和一些我没有从远程数据库中获取的序列插入到表中。

如有任何建议,我们将不胜感激。

最佳答案

  • 您需要在远程表中有一个索引列,每次在其中插入或更新行时该索引列都会增加(不是时间戳,因为许多行可能具有相同的时间戳,计算机时钟有时会倒退ETC。)。如果您从不更新,那么串行主键就足够了(如果您决定依赖此,则强制不允许使用触发器进行更新)。删除也不会被同步,所以我建议强制他们也不允许使用触发器。

  • 您需要一个 cron(或 Windows 上的调度程序)作业来连接到您的数据库并执行同步,因为 PostgreSQL 没有周期性任务的机制。

  • 这项工作只会做:

    start transaction;lock table local_tablename in exclusive mode;dblink_connect(…);insert into local_tablename (id, data, row_counter)  select * from dblink(    'select id, data, row_counter from remote_tablename       where row_counter>'||(select coalesce(max(row_counter),-1) from local_tablename)  ) as t(id int, data text, row_counter int);commit;

    它需要在事务中并用锁保护,因为如果它与另一个同步作业同时运行(例如,如果前一个作业花费超过 10 秒),它可能会中断。

    如果 `local_tablename` 还没有行,则需要 `coalesce` - 没有它就不会插入任何内容。它假定总是 `row_counter>=0`。

关于postgresql - 计划将数据从 dblink 插入到本地表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com