Django应用程序,用于重置存储Postgres扩展OID的django.contrib.postgres缓存
项目描述
django-postgres-hot-upgrade
让Django清除其PostgreSQL扩展OIDs缓存,以便在运行时更新PostgreSQL版本到新的大版本。
如何操作
$ pip install django-postgres-hot-upgrade
INSTALLED_APPS = [
...,
# Warning: django_postgres_hot_upgrade requires to be placed before
# django.contrib.postgres otherwise it will not work.
'django_postgres_hot_upgrade',
'django.contrib.postgres',
...,
]
为什么这样做
PostgreSQL为各种对象(包括加载的扩展)保留内部ID(OIDs)。为了与这些扩展交互,Django需要知道这些OIDs,因此它会加载它们,并在整个过程中将它们缓存在内存中,以避免不必要的请求。
运行相同版本的PostgreSQL的多个服务器将具有一致的OIDs,但在升级时,OIDs可能会更改。如果您使用PostgreSQL负载均衡器,如pgbouncer或pgpool,可能会想要在运行时迁移到新的主要PostgreSQL版本,以避免停机时间。实际上,对于足够新的PostgreSQL版本,这将是可行的,除了OID问题:如果OIDs更改,Django需要更新其缓存。
django_postgres_hot_upgrade
在每次连接后记住服务器的PostgreSQL版本。当版本更新时,它会清除Django的内部OIDs缓存,强制Django获取新值。
其余部分
兼容性:请参阅tox.ini中测试的Python和Django版本。
许可证:MIT
行为准则:本项目置于贡献者协议之下。请将任何滥用报告给joachim.jablon at people-doc.com
。
[维护者] 不太好看的部分
除了单元测试外,此包还有一个集成测试。为了测试此功能,我们需要在一个受控的CI环境中模拟由PG10到PG12的实时更新引起的OIDs更改。这是库中最脆弱的部分,也最有可能在未来中断。以下是需要了解的内容
docker-compose.yml
定义了两个数据库postgres10
和postgres12
,分别监听5432和5433。tests/django_settings.py
使用libpq环境变量定义了一个default
数据库。请注意,在设置中,我们请求在正常数据库上而不是在专用的test_<foo>
数据库上运行测试。- OIDs是在安装扩展时由Postgres创建的。这发生在
tests/migrations/0001_initial.py
中。《DJANGO_REVERSE_OPERATIONS》环境变量控制两个扩展创建的顺序。按照正常顺序运行PG10迁移,并按相反顺序运行PG12迁移,以确保OIDs将不同。 runtests
脚本确保以决定顺序在两个数据库上运行迁移,然后启动测试。如果没有这样做,集成测试可能会失败,因为两个数据库中的OIDs将相同。tox
调用runtests
。- GitHub Actions调用
tox
。
以下是在本地启动测试的工作方式
- 在新鲜数据库上运行
tox
或runtests
- 如果您知道两个数据库上的OIDs已经正确设置,则运行
pytests
项目详情
关闭
django-postgres-hot-upgrade-1.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cdf511e286273ccf3a537099c0f1a8c54b2b800b977f56fb8ec1b017d597595f |
|
MD5 | f48a57717d002102f787954e6ce4d961 |
|
BLAKE2b-256 | c404f180cf9343e5a610d53b294744602580d3d00319ecae9b5c131033b53933 |
关闭
django_postgres_hot_upgrade-1.1.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9216705016e23feb2c7fecffbf729fb03f2bb051daf95ea5136a3c28d65a1f4 |
|
MD5 | 3fc7ed2ba6d2e9b41ec28d48105f41d1 |
|
BLAKE2b-256 | 81aa015ae781d202655e1f1daeeca547512884d72b74d3dd66f917b4c85a4fd3 |