# Duroxide PostgreSQL Provider
A PostgreSQL-based provider implementation for [Duroxide](https://github.com/affandar/duroxide), a durable task orchestration framework for Rust.
> **Note:** See [CHANGELOG.md](CHANGELOG.md) for version history and breaking changes.
## Installation
Add to your `Cargo.toml`:
```toml
[dependencies]
duroxide-pg = "0.1"
```
## Usage
```rust
use duroxide_pg::PostgresProvider;
use duroxide::Worker;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Create a provider with the database URL
let provider = PostgresProvider::new("postgres://user:password@localhost:5432/mydb").await?;
// Use with a Duroxide worker
let worker = Worker::new(provider);
// ... register orchestrations and activities, then run
Ok(())
}
```
### Custom Schema
To isolate data in a specific PostgreSQL schema:
```rust
let provider = PostgresProvider::new_with_schema(
"postgres://user:password@localhost:5432/mydb",
Some("my_schema"),
).await?;
```
## Configuration
| `DUROXIDE_PG_POOL_MAX` | Maximum connection pool size | `10` |
## Features
- **Automatic schema migration** on startup with version tracking - see [migrations/README.md](migrations/README.md)
- Connection pooling via sqlx
- Custom schema support for multi-tenant isolation
- Full implementation of the Duroxide `Provider` and `ProviderAdmin` traits
- Poison message detection with attempt count tracking
- Lock renewal for long-running orchestrations and activities
## Latest Release (0.1.13)
- Fix `cleanup_schema()` to drop stored procedures in public schema (fixes #4)
- Update to duroxide 0.1.11 (bug fix release, no breaking changes)
- 99 provider validation tests passing
- See [CHANGELOG.md](CHANGELOG.md) for full version history
## License
MIT License - see [LICENSE](LICENSE) for details.