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

标签 python postgresql sqlite synchronization gis

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

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

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

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

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

How to Store Historical Data

...

但我找不到任何工具或库来执行此操作,而无需手动编写触发器。根据我的需要,我绝对可以手动完成,但我觉得使用专用的命令行/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/

相关文章:

python - 我怎样才能让 send() 阻止 UDP?

sql - Groovy SQL 错误 - 此结果集已关闭

arrays - 如何聚合 Postgres 数组中多条记录的所有数组值?

sql - 这个问题应该正确查询什么?

具有多线程的Android sqlite

android - 您可以将 SQLite R-Tree 模块与 Android Room 一起使用吗?

python - Apache virtualenv 和 mod_wsgi : ImportError : No module named 'django'

python - 在 Pandas 数据框中获取组大小

java - Android 应用程序在尝试连接 SQLite 数据库时崩溃

python - Django:命名 URL/相同模板,不同命名 URL