MagicStack / MagicStack/asyncpg
Support a Pool `before_connect` callback to be used before a connection is created
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 8.1k
- 派生
- 468
- PR 合并指标
- 30 天内没有已合并 PR
描述
- asyncpg version: 0.27.0
- PostgreSQL version: 14
- Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?: Local - Python version: 3.9.9
- Platform: macos
- Do you use pgbouncer?: no
- Did you install asyncpg with pip?: yes
- If you built asyncpg locally, which version of Cython did you use?:
- Can the issue be reproduced under both asyncio and
uvloop?:
Hello! This is more of a feature request but I was wondering if there could be support for having a before_connect or similar callback when creating a Pool object that would run before a new connection is created? I see there is already an init param which is run after a connection is made.
Our use case is that we use dynamic credentials to access our postgres database and want to make sure that when we create a connection we are using credentials that are not stale. Is this something that makes sense for this project? There is similar functionality in other libraries such as sqlalchemy or pgx.
I was looking at how to do this as-is and there were two currently that I was exploring. One way would be to create our own Pool class which seems like a lot of maintainance for what we'd like to do. The other looked at creating a subclass and overriding the acquire and using set_connect_args but that would run every time we get a connection from a pool which would be wasteful as opposed to just when the creation happens.
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 asyncpg/pool.py 开始,重点查看现有的 init 回调以及 issue 中描述的 acquire/set_connect_args 路径,以了解连接何时创建、何时从池中取出。完成的标准是,before-connect hook 只能在创建新的池连接时刷新动态凭据,而不是在每次 acquire 时刷新。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- postgresql, python
- 领域
- database
- Issue 类型
- 功能
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100