Tema
Configuracion de la Base de Datos
Capyshop requiere PostgreSQL 17+ con la extension pgvector instalada.
Requisitos Previos
- Servidor PostgreSQL 17+ con pgvector instalado
- Acceso al superusuario
postgres(o equivalente) para la configuracion inicial
1. Crear la Base de Datos y el Usuario
Conectate a tu servidor PostgreSQL como superusuario (ej. postgres) y ejecuta:
sql
CREATE DATABASE your_database;
CREATE USER your_user WITH PASSWORD 'your_secure_password';2. Configurar Permisos de la Base de Datos
Conectate a la base de datos recien creada y otorga los permisos necesarios:
sql
-- Conectarse a la base de datos
\c your_database
-- Otorgar privilegios al usuario
GRANT ALL PRIVILEGES ON DATABASE your_database TO your_user;
GRANT ALL ON SCHEMA public TO your_user;
-- Crear la extension pgvector (requiere superusuario)
CREATE EXTENSION IF NOT EXISTS vector;La extension vector debe ser creada por un superusuario. Una vez creada, el usuario de la aplicacion puede usarla sin privilegios de superusuario.
3. Establecer la URL de Conexion
Configura la variable de entorno DATABASE_URL con tus datos de conexion:
DATABASE_URL=postgresql://your_user:your_secure_password@localhost:5432/your_databaseEjemplo con Docker Compose
Si usas la imagen personalizada de PostgreSQL con pgvector, puedes automatizar la configuracion con un script de inicializacion.
Crea init-db.sql:
sql
GRANT ALL PRIVILEGES ON DATABASE your_database TO your_user;
GRANT ALL ON SCHEMA public TO your_user;
CREATE EXTENSION IF NOT EXISTS vector;Montalo en tu docker-compose.yml:
yaml
postgres:
image: your-pgvector-image:latest
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres_password
- POSTGRES_DB=your_database
volumes:
- ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
- postgres_data:/var/lib/postgresql/dataLuego crea el usuario de la aplicacion manualmente o mediante otro script de inicializacion:
sql
-- En un segundo script de inicializacion (ej. 00-create-user.sql, se ejecuta antes de init-db.sql)
CREATE USER your_user WITH PASSWORD 'your_secure_password';Nota: Los scripts en
/docker-entrypoint-initdb.d/solo se ejecutan cuando el directorio de datos de PostgreSQL esta vacio (primer inicio). Si la base de datos ya existe, ejecuta los comandos SQL manualmente.
Solucion de Problemas
| Error | Causa | Solucion |
|---|---|---|
permission denied for schema public | El usuario no tiene permisos sobre el esquema | GRANT ALL ON SCHEMA public TO your_user; |
permission denied to create extension "vector" | La extension debe ser creada por un superusuario | Ejecuta CREATE EXTENSION IF NOT EXISTS vector; como superusuario |
type "vector" does not exist | La extension pgvector no esta instalada o no fue creada | Instala pgvector en PostgreSQL y ejecuta CREATE EXTENSION IF NOT EXISTS vector; |
P3009 - failed migrations | Una migracion anterior fallo y dejo un estado inconsistente | DROP TABLE IF EXISTS _prisma_migrations CASCADE; y luego vuelve a ejecutar las migraciones |
Connection url is empty | DATABASE_URL no esta configurada | Asegurate de que la variable de entorno este configurada en tu entorno de despliegue |