Skip to content

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_database

Ejemplo 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/data

Luego 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

ErrorCausaSolucion
permission denied for schema publicEl usuario no tiene permisos sobre el esquemaGRANT ALL ON SCHEMA public TO your_user;
permission denied to create extension "vector"La extension debe ser creada por un superusuarioEjecuta CREATE EXTENSION IF NOT EXISTS vector; como superusuario
type "vector" does not existLa extension pgvector no esta instalada o no fue creadaInstala pgvector en PostgreSQL y ejecuta CREATE EXTENSION IF NOT EXISTS vector;
P3009 - failed migrationsUna migracion anterior fallo y dejo un estado inconsistenteDROP TABLE IF EXISTS _prisma_migrations CASCADE; y luego vuelve a ejecutar las migraciones
Connection url is emptyDATABASE_URL no esta configuradaAsegurate de que la variable de entorno este configurada en tu entorno de despliegue