All checks were successful
🚀 Docker Build and Push / build-and-push (15) (push) Successful in 5m44s
🚀 Docker Build and Push / build-and-push (16) (push) Successful in 5m33s
🚀 Docker Build and Push / build-and-push (18) (push) Successful in 6m7s
🚀 Docker Build and Push / build-and-push (17) (push) Successful in 7m54s
- Multi-stage Dockerfile for optimized image size (676MB vs 2GB) - Support for PostgreSQL 15, 16, 17, 18 - TimescaleDB 2.24.0, VectorChord 1.0.0, pgvector 0.8.1 - Auto-creation of extensions on first startup - CI/CD with tests for all versions - OCI labels and healthcheck included
91 lines
2.5 KiB
Markdown
91 lines
2.5 KiB
Markdown
# TimescaleDB + VectorChord + pgvector
|
|
|
|
[](https://gitea.killinger.fr/maxime.killinger/postgres-ts-vectors/actions)
|
|
|
|
Docker image combining **PostgreSQL** with three powerful extensions:
|
|
|
|
- **[TimescaleDB](https://www.timescale.com/)** - Time-series database extension
|
|
- **[VectorChord](https://vectorchord.ai/)** - High-performance vector similarity search
|
|
- **[pgvector](https://github.com/pgvector/pgvector)** - Open-source vector similarity search
|
|
|
|
## Supported PostgreSQL Versions
|
|
|
|
| Tag | PostgreSQL | TimescaleDB | VectorChord | pgvector |
|
|
|-----|------------|-------------|-------------|----------|
|
|
| `pg15` | 15 | 2.24.0 | 1.0.0 | 0.8.1 |
|
|
| `pg16` | 16 | 2.24.0 | 1.0.0 | 0.8.1 |
|
|
| `pg17` | 17 | 2.24.0 | 1.0.0 | 0.8.1 |
|
|
| `pg18`, `latest` | 18 | 2.24.0 | 1.0.0 | 0.8.1 |
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
docker run -d \
|
|
--name my-postgres \
|
|
-e POSTGRES_PASSWORD=mysecretpassword \
|
|
-p 5432:5432 \
|
|
gitea.killinger.fr/maxime.killinger/postgres-ts-vectors:latest
|
|
```
|
|
|
|
All extensions are **automatically created** on first startup.
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Description | Default |
|
|
|----------|-------------|---------|
|
|
| `POSTGRES_PASSWORD` | PostgreSQL password (required) | - |
|
|
| `POSTGRES_USER` | PostgreSQL user | `postgres` |
|
|
| `POSTGRES_DB` | Default database | `postgres` |
|
|
|
|
## Extensions Usage
|
|
|
|
### TimescaleDB
|
|
|
|
```sql
|
|
-- Create a hypertable
|
|
CREATE TABLE conditions (
|
|
time TIMESTAMPTZ NOT NULL,
|
|
device_id INTEGER,
|
|
temperature DOUBLE PRECISION
|
|
);
|
|
|
|
SELECT create_hypertable('conditions', 'time');
|
|
```
|
|
|
|
### VectorChord / pgvector
|
|
|
|
```sql
|
|
-- Create a table with vector embeddings
|
|
CREATE TABLE documents (
|
|
id SERIAL PRIMARY KEY,
|
|
content TEXT,
|
|
embedding vector(1536)
|
|
);
|
|
|
|
-- Create an index for fast similarity search
|
|
CREATE INDEX ON documents USING vchordrq (embedding vector_l2_ops);
|
|
|
|
-- Query similar documents
|
|
SELECT * FROM documents
|
|
ORDER BY embedding <-> '[0.1, 0.2, ...]'
|
|
LIMIT 10;
|
|
```
|
|
|
|
## Building Locally
|
|
|
|
```bash
|
|
# Build for PG18
|
|
docker build --build-arg PG_VERSION=18 -t my-image:pg18 .
|
|
|
|
# Build for PG16
|
|
docker build --build-arg PG_VERSION=16 -t my-image:pg16 .
|
|
```
|
|
|
|
## License
|
|
|
|
This project is licensed under the Apache 2.0 License.
|
|
|
|
- TimescaleDB: [Timescale License](https://github.com/timescale/timescaledb/blob/main/LICENSE)
|
|
- VectorChord: [Apache 2.0](https://github.com/tensorchord/VectorChord/blob/main/LICENSE)
|
|
- pgvector: [PostgreSQL License](https://github.com/pgvector/pgvector/blob/master/LICENSE)
|