我目前正在进行一个项目,需要进行数据库同步。我们在服务器上有一个主数据库,并在其上有一个用于与数据交互的 Web 应用程序。但由于这些数据是地理数据(复杂的多边形和一些点),因此用户在处理多边形(我们使用QGIS)时拥有本地数据库,然后将更改上传到服务器中会更方便、更高效。但是,当用户在本地工作时,服务器中的某些点可能会被修改(只能与服务器上的点进行交互)。这就是为什么我需要同步数据库的能力。
在本地数据库和服务器数据库上拥有点的 INSERT、UPDATE 和 DELETE 历史记录应该足以重建点的历史记录,然后进行同步。
顺便说一句,我们使用 Spatialite 作为本地数据库,使用 PostGIS 作为服务器主数据库
我找到了很多关于如何使用数据库触发器来执行此操作的资源:
http://database-programmer.blogspot.com/2008/07/history-tables.html
...
但我找不到任何工具或库来执行此操作,而无需手动编写触发器。根据我的需要,我绝对可以手动完成,但我觉得使用专用的命令行/API 工具也可以变得更容易、更方便。例如,该工具将为用户想要跟踪历史记录的表生成历史表和触发器,我们还可以想象不同的选项,例如:
- 我们要跟踪哪些列?
- 我们只想跟踪操作还是值?
- ...
总而言之,我的问题是:
- 是否有任何现有工具可以执行此操作?我搜索了一下,什么也没找到。
- 您认为实现这样的工具可行/相关吗?我正在考虑用 Python 来做这件事(因为我的项目是 Django 驱动的),启用不同的后端(现在我需要 SQLite/Spatialite 和 PostgreSQL/PostGIS)...
感谢您的回答,
暗淡
最佳答案
查看GeoGig 。 GeoGig 可以跟踪和同步来自各种来源的地理数据,即 Postgis、Esri shapefile 和 Spatialite。它实现了典型的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
关于python - 一种用于跟踪数据库中表历史记录的命令行/API 工具,它是否存在,或者我应该去开发一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506743/