|
| 1 | + |
| 2 | +[](https://github.com/lcd1232/django-postgrespool2/blob/master/LICENSE) |
| 3 | +[](https://pypi.org/project/django-postgrespool2/) |
| 4 | + |
| 5 | +# Django-PostgresPool2 |
| 6 | +This is simple PostgreSQL connection pooling for Django. You can use it as an alternative for [PgBouncer](https://www.pgbouncer.org/). |
| 7 | +This is a fork of the original [django-postgrespool](https://github.com/kennethreitz/django-postgrespool). |
| 8 | + |
| 9 | +## Installation |
| 10 | + |
| 11 | +Installing Django-PostgresPool2 is simple, with pip: |
| 12 | +```bash |
| 13 | +$ pip install django-postgrespool2 |
| 14 | +``` |
| 15 | + |
| 16 | +## Usage |
| 17 | + |
| 18 | +Using Django-PostgresPool2 is simple, just set `django_postgrespool2` as your connection engine: |
| 19 | +```python |
| 20 | +DATABASES = { |
| 21 | + "default": { |
| 22 | + "ENGINE": "django_postgrespool2", |
| 23 | + "NAME": "yourdb", |
| 24 | + "USER": "user", |
| 25 | + "PASSWORD": "some_password", |
| 26 | + "HOST": "localhost", |
| 27 | + } |
| 28 | +} |
| 29 | +``` |
| 30 | +If you're using the [environ](https://github.com/joke2k/django-environ) module: |
| 31 | +```python |
| 32 | +import environ |
| 33 | + |
| 34 | +env = environ.Env() |
| 35 | + |
| 36 | +DATABASES = {"default": env.db("DATABASE_URL", engine="django_postgrespool2")} |
| 37 | +``` |
| 38 | +Everything should work as expected. |
| 39 | + |
| 40 | +Configuration |
| 41 | +------------- |
| 42 | + |
| 43 | +Optionally, you can provide pool class to construct the pool (default `sqlalchemy.pool.QueuePool`) or additional options to pass to SQLAlchemy's pool creation. |
| 44 | +List of possible values `DATABASE_POOL_CLASS` is [here](https://docs.sqlalchemy.org/en/14/core/pooling.html#api-documentation-available-pool-implementations) |
| 45 | +```python |
| 46 | +DATABASE_POOL_CLASS = 'sqlalchemy.pool.QueuePool' |
| 47 | + |
| 48 | +DATABASE_POOL_ARGS = { |
| 49 | + 'max_overflow': 10, |
| 50 | + 'pool_size': 5, |
| 51 | + 'recycle': 300, |
| 52 | +} |
| 53 | +``` |
| 54 | +Here's a basic explanation of two of these options: |
| 55 | + |
| 56 | +- **pool_size** – The *minimum* number of connections to maintain in the pool. |
| 57 | +- **max_overflow** – The maximum *overflow* size of the pool. This is not the maximum size of the pool. |
| 58 | +- **recycle** - Number of seconds between connection recycling, which means upon checkout, if this timeout is surpassed the connection will be closed and replaced with a newly opened connection. |
| 59 | + |
| 60 | +The total number of "sleeping" connections the pool will allow is `pool_size`. The total simultaneous connections the pool will allow is `pool_size + max_overflow`. |
| 61 | + |
| 62 | +As an example, databases in the [Heroku Postgres](https://www.heroku.com/postgres) starter tier have a maximum connection limit of 20. In that case your `pool_size` and `max_overflow`, when combined, should not exceed 20. |
| 63 | + |
| 64 | +Check out the official [SQLAlchemy Connection Pooling](http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.QueuePool.__init__) docs to learn more about the optoins that can be defined in `DATABASE_POOL_ARGS`. |
0 commit comments