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