重置的Django应用程序django.contrib.postgres公司存储postgres扩展OID的缓存

django-postgres-hot-upgrade的Python项目详细描述


django postgres热升级

Deployed to PyPIDeployed to PyPIContinuous IntegrationMIT LicenseContributor Covenant

让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。在

LicenseMIT

行为准则:此项目位于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.pyDJANGO_REVERSE_OPERATIONS环境变量控件 创建2个扩展的顺序。以正常顺序运行PG10迁移 而PG12的逆向迁移保证了oid的不同。在
  • runtests脚本确保迁移在 命令,然后启动测试。如果没有这一点,集成测试可能会失败 因为两个数据库中的OID是相同的。在
  • tox调用runtests。在
  • GitHub操作调用tox。在

在本地启动测试的以下工作:

  • 在新数据库上运行toxruntests
  • 如果您知道已经在2个数据库上正确设置了oid,请运行pytests

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用prepared语句在oracle中插入日期   对点具有双重值的java   使用多个通配符的java请求映射   java Springboot为什么要设置springbootstartertomcat   除了对JavaBean的请求之外,还使用servletContext的servlet   java如何清除OCSID。返回到池的连接时的CLIENTID JDBC客户端信息属性   将整型数组转换为光栅Java   java使用对象引用作为互斥锁   java为什么在编程语言中使用sin函数返回奇怪的sin值不像计算器   java如何将JButton链接到对象并调用相关方法   php用Java发送POST数据   导航属性的java模拟加载   java多个活动错误Android试图对空对象引用调用虚拟方法“”   java Android更改ActionBar文本颜色   如何使用带有java反射且不带开关的parant引用创建子类