一个用于跟踪数据库中表格历史记录的 command-line/API 工具,它是否存在,或者我应该去开发一个吗?

A command-line/API tool for tracking history of tables in a database, does it exist or should I go and develop one?

我目前正在做一个需要进行数据库同步的项目。我们在服务器上有一个主数据库,上面有一个 webapp 来与数据交互。但由于这些数据是地理数据(复杂的多边形和一些点),用户在处理多边形时拥有本地数据库(我们使用 QGIS),然后上传服务器中的更改更方便、更高效。但是当一个用户在本地工作时,有可能在服务器上修改了一些点(只能与服务器上的点交互)。这就是为什么我需要同步数据库的能力。

在本地数据库和服务器数据库上具有点的 INSERT、UPDATE 和 DELETE 历史应该足以重建点的历史然后同步。

顺便说一句,我们本地数据库使用Spatialite,服务器主数据库使用PostGIS

我找到了大量关于如何使用数据库触发器执行此操作的资源:

http://database-programmer.blogspot.com/2008/07/history-tables.html

How to Store Historical Data

...

但是我找不到任何工具或库来执行此操作而无需手动编写触发器。对于我的需要,我绝对可以手动完成,但我觉得使用专用 command-line/API 工具也可以使它变得更容易、更方便。例如,该工具会为用户想要跟踪历史的表生成历史表和触发器,我们还可以想象不同的选项,例如:

总而言之,我的问题是:

感谢您的回答,

昏暗'

正如 Wander 所暗示的,这并不像 "Having an history of INSERT, UPDATE and DELETE" 和保持它们同步那么简单。引擎盖下发生了很多事情。有很多用于复制/镜像的 DBMS 工具。这是 PostreSQL 的一个示例:pgpool.

感谢 Wander Nauta 和 David G 的回答,我完全同意执行同步 通常 并不像这样简单。我应该提供更多细节,但就我而言,我认为这就足够了,因为:

  • 本地数据始终是服务器数据的子集,每个用户都分配了一个子集。所以总是只有一个人在给定的子集上离线工作。
  • 在服务器上,用户只能modify/delete他们创建的数据。

为了提供有关上下文的更多信息,每个用户都根据航拍图像对一个地区的一个区域进行本地数字化。每个用户都被分配到一个区域进行数字化,并且能够将他的作品上传到服务器上。在服务器上,通过一个webapp,用户可以查阅大家的作品,post个问题点并进行评论,主要是指出数字化上的疑惑或疏漏。我想要的是用户可以用同事加的点下载一份自己在做的区,本地解决问题,删点,最后添加新的疑惑再上传。

本地数据库和服务器数据库之间并没有真正的master/slave关系,每个数据库都有特定的作用。因此,我不确定 replication/mirroring 是否能满足我的需求,但也许我错了?另外,我想避免使用满足需求的过于复杂的解决方案,并避免添加太多新的依赖项,因为需求不会有太大变化。

查看 GeoGig. GeoGig can track and synchronize geodata from various sources, i.e Postgis, Esri shapefile and spatialite. It implements the typical Git 工作流程,但要看数据。您将在服务器上拥有一个数据存储库,可以从本地工作站克隆、拉取和推送该数据存储库。

GeoGit 是一个年轻的项目,仍处于测试阶段,但已经很强大且功能丰富,能够合并不同的提交、创建差异、切换分支、跟踪历史和所有其他典型的 Git 任务。

典型 GeoGig 工作流程示例:

Geogig 有一个舒适的命令行界面:

# on  http://server, initialize and start the remote repository on port 8182 (defaut)
geogig init
geogig serve

# on local, clone the remore repository to your machine
geogig clone http://server:8182 your_repository

cd your_repository/

# on local, import in geogig the data you are working on (Postgis)
geogig pg import --schema public --database your_database --user your_user --password your_pass --table  your_table

# on local, add the local changes
geogig add

# on local, commit your changes
geogig commit -m "First commit"

# on local, push to the remote repository
geogig push

您可以请 bucardo 来完成多主机同步方面的繁重工作。看看 https://bucardo.org/wiki/Bucardo 他们承诺他们甚至可以在不同类型的数据库之间进行同步,例如。 postgresql <-> sqlite, http://blog.endpoint.com/2015/08/bucardo-postgres-replication-pgbench.html

虽然我不确定特殊的地理空间功能(仅同步区域)。

Geogig 绝对值得一试。您可以将 Geogig 存储库直接插入 GeoServer 以服务 WMS 并通过 Web/WFS.

编辑功能