重置的Django应用程序django.contrib.postgres公司存储postgres扩展OID的缓存
django-postgres-hot-upgrade的Python项目详细描述
django postgres热升级
让Django清除它的PostgreSQL扩展OIDs缓存,使更新成为可能 将PostgreSQL版本转换为新的主版本。在
如何
$ pip install django-postgres-hot-upgrade
^{pr2}$
为什么
PostgreSQL保留各种对象的内部ID (OIDs)。这包括 加载的扩展。为了与这些扩展交互,Django需要知道 这些iod,所以它加载它们,为了避免unneeded requests,它将它们缓存在内存中 过程的持续时间。在
运行相同版本的PostgreSQL的多个PostgreSQL服务器将具有一致的 但是当你升级时,oid可以改变。如果使用PostgreSQL负载平衡器 作为pgbouncer或{a9},一个 可能会在主要的PostgreSQL版本之间动态迁移,以避免 停机时间。实际上,对于PostgreSQL的最新版本来说,这是可行的 从OID问题来看:如果OID发生变化,Django需要更新其缓存。在
django_postgres_hot_upgrade
在每次之后都会记住服务器的postgres版本
连接。当版本更新时,它会清除内部的Django OIDs缓存,
强迫Django获取新值。在
其余的
Compatibility:请参考在中测试的Python和Django版本 tox.ini。在
License:MIT
行为准则:此项目位于Contributor
Coveneant之下。拜托
向joachim.jablon at people-doc.com
报告任何滥用行为。在
[维护者]丑陋的部分
除了单元测试之外,这个包还有一个集成测试。为了测试 特性,我们需要模拟从PG10到PG12的实时更新引起的oid的变化 在受控CI环境中。这是lib中最脆弱的部分,也是最脆弱的部分 将来可能会破裂。你需要知道的是:
docker-compose.yml
定义两个数据库postgres10
和{}监听 分别是5432和5433。在 tests/django_settings.py
使用libpq环境定义default
数据库。请注意 在设置中,我们请求测试在普通数据库上运行,而不是 专用test_<foo>
数据库。在- oid是由Postgres在安装扩展时创建的。这种情况发生在
tests/migrations/0001_initial.py
。DJANGO_REVERSE_OPERATIONS
环境变量控件 创建2个扩展的顺序。以正常顺序运行PG10迁移 而PG12的逆向迁移保证了oid的不同。在 runtests
脚本确保迁移在 命令,然后启动测试。如果没有这一点,集成测试可能会失败 因为两个数据库中的OID是相同的。在tox
调用runtests
。在- GitHub操作调用
tox
。在
在本地启动测试的以下工作:
- 在新数据库上运行
tox
或runtests
- 如果您知道已经在2个数据库上正确设置了oid,请运行
pytests
- 项目
标签: