# TaskIQ PostgreSQL
TaskIQ PostgreSQL is a comprehensive plugin for [TaskIQ](https://taskiq-python.github.io/) that provides PostgreSQL-based broker, result backend, and scheduler source with support for multiple PostgreSQL drivers.
## Features
- **🚀 PostgreSQL Broker**: High-performance message broker using PostgreSQL LISTEN/NOTIFY
- **📦 Result Backend**: Persistent task result storage with configurable retention
- **⏰ Scheduler Source**: Cron-like task scheduling with PostgreSQL persistence
- **🔌 Multiple Drivers**: Support for asyncpg, psycopg3, and psqlpy
- **⚡ Async/Await**: Built for high-performance async operations
- **🛠️ Flexible Configuration**: Customizable table names, field types, and connection options
- **🔄 Multiple Serializers**: Support for different serialization methods (Pickle, JSON, etc.)
- **🔐 Connection Pooling**: Built-in connection pool management for all drivers
## Installation
### Basic Installation
```bash
pip install taskiq-postgresql
```
### With Driver Dependencies
Choose your preferred PostgreSQL driver:
**AsyncPG (Recommended)**
```bash
pip install taskiq-postgresql[asyncpg]
```
**Psycopg3**
```bash
pip install taskiq-postgresql[psycopg]
```
**PSQLPy**
```bash
pip install taskiq-postgresql[psqlpy]
```
### Using Package Managers
**Poetry:**
```bash
poetry add taskiq-postgresql[asyncpg]
```
**UV:**
```bash
uv add taskiq-postgresql[asyncpg]
```
**Rye:**
```bash
rye add taskiq-postgresql[asyncpg]
```
> **Note**: Driver extras are required as PostgreSQL drivers are optional dependencies. Without them, the PostgreSQL drivers won't be available.
## Quick Start
### Basic Task Processing
```python
import asyncio
from taskiq_postgresql import PostgresqlBroker, PostgresqlResultBackend
# Configure the result backend
result_backend = PostgresqlResultBackend(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
)
# Configure the broker with result backend
broker = PostgresqlBroker(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
).with_result_backend(result_backend)
@broker.task
async def calculate_sum(a: int, b: int) -> int:
"""Calculate the sum of two numbers."""
await asyncio.sleep(1) # Simulate some work
return a + b
async def main():
# Startup the broker
await broker.startup()
# Send a task
task = await calculate_sum.kiq(10, 20)
# Wait for result
result = await task.wait_result()
print(f"Result: {result}") # Result: 30
# Shutdown the broker
await broker.shutdown()
if __name__ == "__main__":
asyncio.run(main())
```
### Task Scheduling
```python
from taskiq_postgresql import PostgresqlBroker, PostgresqlSchedulerSource
from taskiq import TaskiqScheduler
# Initialize broker
broker = PostgresqlBroker(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db"
)
# Initialize scheduler source
scheduler_source = PostgresqlSchedulerSource(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
table_name="taskiq_schedules",
driver="asyncpg"
)
# Create scheduler
scheduler = TaskiqScheduler(
broker=broker,
sources=[scheduler_source],
)
@broker.task
async def scheduled_task():
print("This task runs on schedule!")
# Schedule task to run every minute
async def setup_schedule():
await scheduler_source.add_schedule(
schedule_id="task-every-minute",
task_name="scheduled_task",
cron="* * * * *", # Every minute
args=[],
kwargs={}
)
```
## Configuration
### PostgresqlBroker
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dsn` | `str` | Required | PostgreSQL connection string |
| `queue_name` | `str` | `"taskiq_queue"` | Name of the queue table |
| `field_for_task_id` | `Literal["VarChar", "Text", "Uuid"]` | `"Uuid"` | Field type for task IDs |
| `driver` | `Literal["asyncpg", "psycopg", "psqlpy"]` | `"asyncpg"` | Database driver |
| `**connect_kwargs` | `Any` | - | Additional driver-specific connection parameters |
### PostgresqlResultBackend
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dsn` | `str` | Required | PostgreSQL connection string |
| `keep_results` | `bool` | `True` | Whether to keep results after reading |
| `table_name` | `str` | `"taskiq_results"` | Name of the results table |
| `field_for_task_id` | `Literal["VarChar", "Text", "Uuid"]` | `"Uuid"` | Field type for task IDs |
| `serializer` | `BaseSerializer` | `PickleSerializer()` | Serializer instance |
| `driver` | `Literal["asyncpg", "psycopg", "psqlpy"]` | `"asyncpg"` | Database driver |
| `**connect_kwargs` | `Any` | - | Additional driver-specific connection parameters |
### PostgresqlSchedulerSource
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dsn` | `str` | Required | PostgreSQL connection string |
| `table_name` | `str` | `"taskiq_schedules"` | Name of the schedules table |
| `driver` | `Literal["asyncpg", "psycopg", "psqlpy"]` | `"asyncpg"` | Database driver |
| `startup_schedule` | `dict` | `None` | Schedule definitions to create on startup |
| `**connect_kwargs` | `Any` | - | Additional driver-specific connection parameters |
## Database Drivers
### AsyncPG (Recommended)
- **Performance**: Fastest PostgreSQL driver for Python
- **Features**: Full asyncio support, prepared statements, connection pooling
- **Use case**: High-performance applications
### Psycopg3
- **Performance**: Good performance with extensive features
- **Features**: Full PostgreSQL feature support, mature ecosystem
- **Use case**: Feature-rich applications needing advanced PostgreSQL features
### PSQLPy
- **Performance**: Rust-based driver with excellent performance
- **Features**: Modern async implementation
- **Use case**: Applications prioritizing performance and modern architecture
## Advanced Configuration
### Custom Serializer
```python
from taskiq.serializers import JSONSerializer
result_backend = PostgresqlResultBackend(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
serializer=JSONSerializer(),
)
```
### Custom Table Names and Field Types
```python
broker = PostgresqlBroker(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
queue_name="my_custom_queue",
field_for_task_id="Text", # Use TEXT instead of UUID
)
result_backend = PostgresqlResultBackend(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
table_name="my_custom_results",
field_for_task_id="VarChar", # Use VARCHAR instead of UUID
)
```
### Connection Pool Configuration
```python
# AsyncPG
broker = PostgresqlBroker(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
driver="asyncpg",
min_size=5,
max_size=20,
max_inactive_connection_lifetime=300,
)
# Psycopg3
broker = PostgresqlBroker(
dsn="postgresql://postgres:postgres@localhost:5432/taskiq_db",
driver="psycopg",
min_size=5,
max_size=20,
max_lifetime=3600,
)
```
### Using Environment Variables
```python
import os
# From environment
dsn = os.getenv("DATABASE_URL", "postgresql://localhost/taskiq")
# With SSL
dsn = "postgresql://user:pass@localhost:5432/db?sslmode=require"
broker = PostgresqlBroker(dsn=dsn)
```
## Database Schema
The library automatically creates the necessary tables:
### Queue Table (default: `taskiq_queue`)
```sql
CREATE TABLE taskiq_queue (
id SERIAL PRIMARY KEY,
task_id UUID NOT NULL,
task_name VARCHAR NOT NULL,
message BYTEA NOT NULL,
labels JSONB,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
### Results Table (default: `taskiq_results`)
```sql
CREATE TABLE taskiq_results (
task_id UUID PRIMARY KEY,
result BYTEA,
is_err BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
### Schedules Table (default: `taskiq_schedules`)
```sql
CREATE TABLE taskiq_schedules (
id UUID PRIMARY KEY,
task_name VARCHAR(100) NOT NULL,
schedule JSONB NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
## Performance Tips
1. **Choose the Right Driver**: AsyncPG typically offers the best performance
2. **Connection Pooling**: Configure appropriate pool sizes for your workload
3. **Field Types**: Use UUID for high-performance task IDs, TEXT for debugging
4. **Indexes**: Consider adding indexes on frequently queried columns
5. **Connection Reuse**: Keep broker connections alive during application lifetime
## Troubleshooting
### Common Issues
**Connection Errors**
```python
# Ensure your connection string is correct
dsn = "postgresql://username:password@host:port/database"
# Check PostgreSQL is running and accessible
import asyncpg
conn = await asyncpg.connect(dsn)
await conn.close()
```
**Table Creation Issues**
```python
# Ensure user has CREATE TABLE permissions
# Or manually create tables using provided schemas
```
**Driver Import Errors**
```bash
# Install the appropriate driver extra
pip install taskiq-postgresql[asyncpg]
```
## Requirements
- **Python**: 3.9+
- **TaskIQ**: 0.11.7+
- **PostgreSQL**: 10+
### Driver Dependencies
| Driver | Version | Extra |
|--------|---------|-------|
| AsyncPG | 0.30.0+ | `[asyncpg]` |
| Psycopg3 | 3.2.9+ | `[psycopg]` |
| PSQLPy | 0.11.3+ | `[psqlpy]` |
## Development
This project uses modern Python development tools:
- **[UV](https://github.com/astral-sh/uv)**: Fast Python package installer and resolver
- **[Ruff](https://github.com/astral-sh/ruff)**: Extremely fast Python linter and formatter
- **[Pytest](https://pytest.org/)**: Testing framework
### Setup Development Environment
```bash
# Clone the repository
git clone https://github.com/z22092/taskiq-postgresql.git
cd taskiq-postgresql
# Install dependencies with UV
uv sync
# Install with all driver extras
uv sync --extra asyncpg --extra psycopg --extra psqlpy
# Run tests
uv run pytest
# Format and lint
uv run ruff format
uv run ruff check
```
## Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Add tests for new functionality
4. Ensure all tests pass
5. Submit a pull request
## License
This project is licensed under the MIT License. See the LICENSE file for details.
## Links
- **[TaskIQ Documentation](https://taskiq-python.github.io/)** - Main TaskIQ framework
- **[AsyncPG Documentation](https://magicstack.github.io/asyncpg/)** - AsyncPG driver docs
- **[Psycopg Documentation](https://www.psycopg.org/psycopg3/)** - Psycopg3 driver docs
- **[PostgreSQL Documentation](https://www.postgresql.org/docs/)** - PostgreSQL database docs
- **[GitHub Repository](https://github.com/z22092/taskiq-postgresql)** - Source code and issues
Raw data
{
"_id": null,
"home_page": null,
"name": "taskiq-postgresql",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "async, asyncpg, distributed, postgresql, psqlpy, psycopg3, taskiq, tasks",
"author": null,
"author_email": "jeffersonsilva-mb <jefferson.silva@mb.com.br>, Jefferson Venceslau <jeff.venceslau@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/5c/6a/c636c33b97c438c6fc4c7073b73a50e9bee9c50dd91ca1e229cec5d10fa7/taskiq_postgresql-0.1.0.tar.gz",
"platform": null,
"description": "# TaskIQ PostgreSQL\n\nTaskIQ PostgreSQL is a comprehensive plugin for [TaskIQ](https://taskiq-python.github.io/) that provides PostgreSQL-based broker, result backend, and scheduler source with support for multiple PostgreSQL drivers.\n\n## Features\n\n- **\ud83d\ude80 PostgreSQL Broker**: High-performance message broker using PostgreSQL LISTEN/NOTIFY\n- **\ud83d\udce6 Result Backend**: Persistent task result storage with configurable retention\n- **\u23f0 Scheduler Source**: Cron-like task scheduling with PostgreSQL persistence\n- **\ud83d\udd0c Multiple Drivers**: Support for asyncpg, psycopg3, and psqlpy\n- **\u26a1 Async/Await**: Built for high-performance async operations\n- **\ud83d\udee0\ufe0f Flexible Configuration**: Customizable table names, field types, and connection options\n- **\ud83d\udd04 Multiple Serializers**: Support for different serialization methods (Pickle, JSON, etc.)\n- **\ud83d\udd10 Connection Pooling**: Built-in connection pool management for all drivers\n\n## Installation\n\n### Basic Installation\n\n```bash\npip install taskiq-postgresql\n```\n\n### With Driver Dependencies\n\nChoose your preferred PostgreSQL driver:\n\n**AsyncPG (Recommended)**\n```bash\npip install taskiq-postgresql[asyncpg]\n```\n\n**Psycopg3**\n```bash\npip install taskiq-postgresql[psycopg]\n```\n\n**PSQLPy**\n```bash\npip install taskiq-postgresql[psqlpy]\n```\n\n\n\n### Using Package Managers\n\n**Poetry:**\n```bash\npoetry add taskiq-postgresql[asyncpg]\n```\n\n**UV:**\n```bash\nuv add taskiq-postgresql[asyncpg]\n```\n\n**Rye:**\n```bash\nrye add taskiq-postgresql[asyncpg]\n```\n\n> **Note**: Driver extras are required as PostgreSQL drivers are optional dependencies. Without them, the PostgreSQL drivers won't be available.\n\n## Quick Start\n\n### Basic Task Processing\n\n```python\nimport asyncio\nfrom taskiq_postgresql import PostgresqlBroker, PostgresqlResultBackend\n\n# Configure the result backend\nresult_backend = PostgresqlResultBackend(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n)\n\n# Configure the broker with result backend\nbroker = PostgresqlBroker(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n).with_result_backend(result_backend)\n\n\n@broker.task\nasync def calculate_sum(a: int, b: int) -> int:\n \"\"\"Calculate the sum of two numbers.\"\"\"\n await asyncio.sleep(1) # Simulate some work\n return a + b\n\n\nasync def main():\n # Startup the broker\n await broker.startup()\n \n # Send a task\n task = await calculate_sum.kiq(10, 20)\n \n # Wait for result\n result = await task.wait_result()\n print(f\"Result: {result}\") # Result: 30\n \n # Shutdown the broker\n await broker.shutdown()\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n### Task Scheduling\n\n```python\nfrom taskiq_postgresql import PostgresqlBroker, PostgresqlSchedulerSource\nfrom taskiq import TaskiqScheduler\n\n# Initialize broker\nbroker = PostgresqlBroker(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\"\n)\n\n# Initialize scheduler source\nscheduler_source = PostgresqlSchedulerSource(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n table_name=\"taskiq_schedules\",\n driver=\"asyncpg\"\n)\n\n# Create scheduler\nscheduler = TaskiqScheduler(\n broker=broker,\n sources=[scheduler_source],\n)\n\n@broker.task\nasync def scheduled_task():\n print(\"This task runs on schedule!\")\n\n# Schedule task to run every minute\nasync def setup_schedule():\n await scheduler_source.add_schedule(\n schedule_id=\"task-every-minute\",\n task_name=\"scheduled_task\",\n cron=\"* * * * *\", # Every minute\n args=[],\n kwargs={}\n )\n```\n\n## Configuration\n\n### PostgresqlBroker\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `dsn` | `str` | Required | PostgreSQL connection string |\n| `queue_name` | `str` | `\"taskiq_queue\"` | Name of the queue table |\n| `field_for_task_id` | `Literal[\"VarChar\", \"Text\", \"Uuid\"]` | `\"Uuid\"` | Field type for task IDs |\n| `driver` | `Literal[\"asyncpg\", \"psycopg\", \"psqlpy\"]` | `\"asyncpg\"` | Database driver |\n| `**connect_kwargs` | `Any` | - | Additional driver-specific connection parameters |\n\n### PostgresqlResultBackend\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `dsn` | `str` | Required | PostgreSQL connection string |\n| `keep_results` | `bool` | `True` | Whether to keep results after reading |\n| `table_name` | `str` | `\"taskiq_results\"` | Name of the results table |\n| `field_for_task_id` | `Literal[\"VarChar\", \"Text\", \"Uuid\"]` | `\"Uuid\"` | Field type for task IDs |\n| `serializer` | `BaseSerializer` | `PickleSerializer()` | Serializer instance |\n| `driver` | `Literal[\"asyncpg\", \"psycopg\", \"psqlpy\"]` | `\"asyncpg\"` | Database driver |\n| `**connect_kwargs` | `Any` | - | Additional driver-specific connection parameters |\n\n### PostgresqlSchedulerSource\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `dsn` | `str` | Required | PostgreSQL connection string |\n| `table_name` | `str` | `\"taskiq_schedules\"` | Name of the schedules table |\n| `driver` | `Literal[\"asyncpg\", \"psycopg\", \"psqlpy\"]` | `\"asyncpg\"` | Database driver |\n| `startup_schedule` | `dict` | `None` | Schedule definitions to create on startup |\n| `**connect_kwargs` | `Any` | - | Additional driver-specific connection parameters |\n\n## Database Drivers\n\n### AsyncPG (Recommended)\n- **Performance**: Fastest PostgreSQL driver for Python\n- **Features**: Full asyncio support, prepared statements, connection pooling\n- **Use case**: High-performance applications\n\n### Psycopg3\n- **Performance**: Good performance with extensive features\n- **Features**: Full PostgreSQL feature support, mature ecosystem\n- **Use case**: Feature-rich applications needing advanced PostgreSQL features\n\n### PSQLPy\n- **Performance**: Rust-based driver with excellent performance\n- **Features**: Modern async implementation\n- **Use case**: Applications prioritizing performance and modern architecture\n\n\n\n## Advanced Configuration\n\n### Custom Serializer\n\n```python\nfrom taskiq.serializers import JSONSerializer\n\nresult_backend = PostgresqlResultBackend(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n serializer=JSONSerializer(),\n)\n```\n\n### Custom Table Names and Field Types\n\n```python\nbroker = PostgresqlBroker(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n queue_name=\"my_custom_queue\",\n field_for_task_id=\"Text\", # Use TEXT instead of UUID\n)\n\nresult_backend = PostgresqlResultBackend(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n table_name=\"my_custom_results\",\n field_for_task_id=\"VarChar\", # Use VARCHAR instead of UUID\n)\n```\n\n### Connection Pool Configuration\n\n```python\n# AsyncPG\nbroker = PostgresqlBroker(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n driver=\"asyncpg\",\n min_size=5,\n max_size=20,\n max_inactive_connection_lifetime=300,\n)\n\n# Psycopg3\nbroker = PostgresqlBroker(\n dsn=\"postgresql://postgres:postgres@localhost:5432/taskiq_db\",\n driver=\"psycopg\",\n min_size=5,\n max_size=20,\n max_lifetime=3600,\n)\n```\n\n### Using Environment Variables\n\n```python\nimport os\n\n# From environment\ndsn = os.getenv(\"DATABASE_URL\", \"postgresql://localhost/taskiq\")\n\n# With SSL\ndsn = \"postgresql://user:pass@localhost:5432/db?sslmode=require\"\n\nbroker = PostgresqlBroker(dsn=dsn)\n```\n\n## Database Schema\n\nThe library automatically creates the necessary tables:\n\n### Queue Table (default: `taskiq_queue`)\n```sql\nCREATE TABLE taskiq_queue (\n id SERIAL PRIMARY KEY,\n task_id UUID NOT NULL,\n task_name VARCHAR NOT NULL,\n message BYTEA NOT NULL,\n labels JSONB,\n created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()\n);\n```\n\n### Results Table (default: `taskiq_results`)\n```sql\nCREATE TABLE taskiq_results (\n task_id UUID PRIMARY KEY,\n result BYTEA,\n is_err BOOLEAN DEFAULT FALSE,\n created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()\n);\n```\n\n### Schedules Table (default: `taskiq_schedules`)\n```sql\nCREATE TABLE taskiq_schedules (\n id UUID PRIMARY KEY,\n task_name VARCHAR(100) NOT NULL,\n schedule JSONB NOT NULL,\n created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),\n updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()\n);\n```\n\n## Performance Tips\n\n1. **Choose the Right Driver**: AsyncPG typically offers the best performance\n2. **Connection Pooling**: Configure appropriate pool sizes for your workload\n3. **Field Types**: Use UUID for high-performance task IDs, TEXT for debugging\n4. **Indexes**: Consider adding indexes on frequently queried columns\n5. **Connection Reuse**: Keep broker connections alive during application lifetime\n\n## Troubleshooting\n\n### Common Issues\n\n**Connection Errors**\n```python\n# Ensure your connection string is correct\ndsn = \"postgresql://username:password@host:port/database\"\n\n# Check PostgreSQL is running and accessible\nimport asyncpg\nconn = await asyncpg.connect(dsn)\nawait conn.close()\n```\n\n**Table Creation Issues**\n```python\n# Ensure user has CREATE TABLE permissions\n# Or manually create tables using provided schemas\n```\n\n**Driver Import Errors**\n```bash\n# Install the appropriate driver extra\npip install taskiq-postgresql[asyncpg]\n```\n\n## Requirements\n\n- **Python**: 3.9+\n- **TaskIQ**: 0.11.7+\n- **PostgreSQL**: 10+\n\n### Driver Dependencies\n\n| Driver | Version | Extra |\n|--------|---------|-------|\n| AsyncPG | 0.30.0+ | `[asyncpg]` |\n| Psycopg3 | 3.2.9+ | `[psycopg]` |\n| PSQLPy | 0.11.3+ | `[psqlpy]` |\n\n## Development\n\nThis project uses modern Python development tools:\n\n- **[UV](https://github.com/astral-sh/uv)**: Fast Python package installer and resolver\n- **[Ruff](https://github.com/astral-sh/ruff)**: Extremely fast Python linter and formatter\n- **[Pytest](https://pytest.org/)**: Testing framework\n\n### Setup Development Environment\n\n```bash\n# Clone the repository\ngit clone https://github.com/z22092/taskiq-postgresql.git\ncd taskiq-postgresql\n\n# Install dependencies with UV\nuv sync\n\n# Install with all driver extras\nuv sync --extra asyncpg --extra psycopg --extra psqlpy\n\n# Run tests\nuv run pytest\n\n# Format and lint\nuv run ruff format\nuv run ruff check\n```\n\n## Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch\n3. Add tests for new functionality\n4. Ensure all tests pass\n5. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License. See the LICENSE file for details.\n\n## Links\n\n- **[TaskIQ Documentation](https://taskiq-python.github.io/)** - Main TaskIQ framework\n- **[AsyncPG Documentation](https://magicstack.github.io/asyncpg/)** - AsyncPG driver docs\n- **[Psycopg Documentation](https://www.psycopg.org/psycopg3/)** - Psycopg3 driver docs \n- **[PostgreSQL Documentation](https://www.postgresql.org/docs/)** - PostgreSQL database docs\n- **[GitHub Repository](https://github.com/z22092/taskiq-postgresql)** - Source code and issues\n",
"bugtrack_url": null,
"license": null,
"summary": "PostgreSQL integration for taskiq",
"version": "0.1.0",
"project_urls": null,
"split_keywords": [
"async",
" asyncpg",
" distributed",
" postgresql",
" psqlpy",
" psycopg3",
" taskiq",
" tasks"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "fd00adf1f0ec0277052e7330697eb804ede14454efb020996a602f2378907d43",
"md5": "5a61275298f55978feed8f0bca41ed40",
"sha256": "f447d9b9f6091ab39605b4612ce11173635c071e37a013f32ecf3ba2fd242fc3"
},
"downloads": -1,
"filename": "taskiq_postgresql-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5a61275298f55978feed8f0bca41ed40",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 24709,
"upload_time": "2025-07-30T12:28:07",
"upload_time_iso_8601": "2025-07-30T12:28:07.212292Z",
"url": "https://files.pythonhosted.org/packages/fd/00/adf1f0ec0277052e7330697eb804ede14454efb020996a602f2378907d43/taskiq_postgresql-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5c6ac636c33b97c438c6fc4c7073b73a50e9bee9c50dd91ca1e229cec5d10fa7",
"md5": "dc5bb83a4bf9d3ffa1cdf75cb435a14d",
"sha256": "33f0efd9b6bed7601493af637c86cd677d4af2464709c273d990616221f2f9bd"
},
"downloads": -1,
"filename": "taskiq_postgresql-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "dc5bb83a4bf9d3ffa1cdf75cb435a14d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 124096,
"upload_time": "2025-07-30T12:28:08",
"upload_time_iso_8601": "2025-07-30T12:28:08.857139Z",
"url": "https://files.pythonhosted.org/packages/5c/6a/c636c33b97c438c6fc4c7073b73a50e9bee9c50dd91ca1e229cec5d10fa7/taskiq_postgresql-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 12:28:08",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "taskiq-postgresql"
}