mirror of
https://github.com/supabase/supabase.git
synced 2026-05-11 02:20:29 +08:00
## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES/NO ## What kind of change does this PR introduce? Docs update ## What is the current behavior? Many troubleshooting guides referencing Postgres functions were placed in the edge function category ## What is the new behavior? Removed the "function" topic filter for guides that are unrelated to edge functions
91 lines
3.9 KiB
Plaintext
91 lines
3.9 KiB
Plaintext
---
|
||
title = "Using SQLAlchemy with Supabase"
|
||
github_url = "https://github.com/orgs/supabase/discussions/27071"
|
||
date_created = "2024-06-06T16:27:43+00:00"
|
||
topics = [ "database", "supavisor", "self-hosting" ]
|
||
keywords = [ "sqlalchemy", "ipv6", "pool", "database", "connection" ]
|
||
database_id = "da4efcda-cd02-4001-965b-f0294300152f"
|
||
---
|
||
|
||
## Deploying to auto-scaling servers:
|
||
|
||
If you are deploying to:
|
||
|
||
- edge functions
|
||
- serverless functions
|
||
- horizontally auto-scaling deployments
|
||
|
||
It is recommended that you connect with the pooler in transaction mode (port 6543), which can be found on the dashboard by clicking [Connect](/dashboard/project/_?showConnect=true&method=transaction).
|
||
|
||
```sh
|
||
# Example transaction mode string:
|
||
postgres://[db-user].[project-ref]:[db-password]@aws-0-[aws-region].pooler.supabase.com:6543
|
||
```
|
||
|
||
When using transaction mode, you should use the[ `NullPool` setting:](https://docs.sqlalchemy.org/en/20/core/pooling.html#switching-pool-implementations)
|
||
|
||
```py
|
||
from sqlalchemy.pool import NullPool
|
||
|
||
con = sqlalchemy.create_engine(url, client_encoding='utf8', poolclass=NullPool)
|
||
```
|
||
|
||
When relying on Supavisor, it's important to pick an adequate pool size. This guide can walk you through the process:
|
||
|
||
- https://github.com/orgs/supabase/discussions/21566
|
||
|
||
## Deploying to stationary servers
|
||
|
||
For stationary servers, such as VMs and long-running containers, it is recommended to use your direct connection string, which can be found on the dashboard by clicking [Connect](/dashboard/project/_?showConnect=true).
|
||
|
||
```
|
||
# Example DB string:
|
||
postgresql://postgres:[PASSWORD]@db.[PROJECT REF].supabase.co:5432/postgres
|
||
```
|
||
|
||
The connection maps to an IPv6 address, and cannot operate in an IPv4 environment.
|
||
|
||
### Checking IPv6 support:
|
||
|
||
The majority of services are IPv6 compatible. However, there are a few prominent services that only accept IPv4 connections:
|
||
|
||
- [Retool](https://retool.com/)
|
||
- [Vercel](https://vercel.com/)
|
||
- [GitHub Actions](https://docs.github.com/en/actions)
|
||
- [Render](https://render.com/)
|
||
|
||
If you're still unsure if your network supports IPv6, you can run this cURL command on your deployment server:
|
||
|
||
```sh
|
||
curl -6 https://ifconfig.co/ip
|
||
```
|
||
|
||
If the command returns an IPv6 address, the network is IPv6 compatible.
|
||
|
||
If your deployment environment is not IPv6 compatible, then consider:
|
||
|
||
- Using the Supavisor pooler in session (port 5432)
|
||
- Enabling the [IPv4 Add-On](/dashboard/project/_/settings/addons) if you're on a pro or above plan
|
||
|
||
### Choosing an internal pool size
|
||
|
||
**Key Pool Settings:**
|
||
|
||
- pool_size: This sets the maximum number of permanent connections in the pool. SQLAlchemy will create connections as needed up to this limit.
|
||
max_overflow: Allows creating additional connections beyond pool_size for temporary bursts in demand. These temporary connections close after use.
|
||
|
||
```python
|
||
# Example configurations
|
||
engine = create_engine(
|
||
"postgresql+psycopg2://me@localhost/mydb", pool_size=20, max_overflow=15
|
||
)
|
||
```
|
||
|
||
As a rule of thumb, if you're using the Supabase Database REST Client, try to limit the connections used by your deployment to 40% of available connections. Otherwise, you can cautiously increase usage to around 80%. These percentages are flexible and depend on your application's usage and setup. Monitor connection usage to determine the optimal allocation without depriving other servers of necessary connections.
|
||
|
||
## How to monitor live connections
|
||
|
||
Connection usage can be monitored with a Supabase Grafana Dashboard. It provides realtime visibility of over 200 database metrics, such as graphs of CPU, EBS, and active direct/pooler connections. It can be extremely useful for monitoring and debugging instances.
|
||
|
||
You can check our [GitHub repo](https://github.com/supabase/supabase-grafana) for setup instructions for local deployments or free cloud deployments on [Fly.io](http://fly.io/). For a complete explainer on connection monitoring, you can check out this [guide](https://github.com/orgs/supabase/discussions/27141)
|