Docker provides an easy way to run PostgreSQL with pgvector pre-installed. This method works on both macOS and Windows.
Run PostgreSQL with pgvector:
docker run -d \
--name postgres-pgvector \
-e POSTGRES_PASSWORD=password \
-e POSTGRES_DB=zooly2_local \
-p 5432:5432 \
-v postgres_data:/var/lib/postgresql/data \
pgvector/pgvector:pg17
Enable pgvector extension:
docker exec -it postgres-pgvector psql -U postgres -d zooly2_local -c "CREATE EXTENSION IF NOT EXISTS vector;"
Create docker-compose.yml in your project root:
version: '3.8'
services:
postgres:
image: pgvector/pgvector:pg17
container_name: zooly-postgres
environment:
POSTGRES_DB: zooly2_local
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d zooly2_local"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
postgres_data:
driver: local
Create init-db.sql file (optional, for automatic extension setup):
CREATE EXTENSION IF NOT EXISTS vector;
Start PostgreSQL:
docker-compose up -d
Verify it's running:
docker-compose ps
View logs:
docker-compose logs postgres
# Stop PostgreSQL
docker-compose down
# Stop and remove volumes (⚠️ deletes data)
docker-compose down -v
# Restart PostgreSQL
docker-compose restart postgres
# Connect to PostgreSQL
docker exec -it zooly-postgres psql -U postgres -d zooly2_local
# Or using docker run
docker exec -it postgres-pgvector psql -U postgres -d zooly2_local
Note: The pgvector/pgvector:pg17 image comes with PostgreSQL 17 and pgvector pre-installed. If you need a different PostgreSQL version, use pgvector/pgvector:pg16 or pgvector/pgvector:pg15.
Port Conflict: If you already have PostgreSQL running on port 5432, either stop it first or change the port mapping in docker-compose.yml (e.g., "5433:5432").
After installation, proceed to: