Saltar a contenido

PostgreSQL Local Dev Environment - Business Observer APV

Fecha: 2026-06-11

Estado: DB DEDICADA LOCAL CREADA / ROLES GRANTS VALIDADOS

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

Fuente de verdad: docs/tenants/alpuntodeventa/business-observer/design/POSTGRES-LOCAL-DEV-ENVIRONMENT.md

Documentos relacionados:

  • docs/tenants/alpuntodeventa/business-observer/design/POSTGRES-PHYSICAL-ARCHITECTURE.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CREDENTIALS-PREFLIGHT.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-WINDOW-PILOT-001.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD-001.md

1. Objetivo

Preparar una base PostgreSQL local dedicada para Business Observer APV, separada de gestion_de_negocios_core, con schema propio, roles separados, credenciales locales no versionadas y validacion de permisos.

Base objetivo:

Campo Valor
database openclaw_business_observer_dev
schema business_observer
rol admin objetivo openclaw_bo_admin
rol writer objetivo openclaw_bo_writer
rol reader objetivo openclaw_bo_reader

2. Safe point

Control Resultado
git status -sb ## main...origin/main
git rev-parse HEAD e698599ed4f09b07990ab1cdcfd196dddbeb7314

3. Alcance aplicado

Control Resultado
VPS NO TOCADO
Docker NO TOCADO
OpenClaw runtime NO TOCADO
NPM NO TOCADO
SOURCE-003 NO EJECUTADO
sync diaria NO EJECUTADA
carga de datos NO EJECUTADA
migracion de negocio NO EJECUTADA
datos existentes NO BORRADOS / NO MOVIDOS
gestion_de_negocios_core NO MODIFICADA
passwords impresos NO
connection strings impresas NO

4. Validacion de credencial admin local

Variables requeridas desde .env local no versionado:

  • APV_LOCAL_POSTGRES_ADMIN_HOST
  • APV_LOCAL_POSTGRES_ADMIN_PORT
  • APV_LOCAL_POSTGRES_ADMIN_DATABASE
  • APV_LOCAL_POSTGRES_ADMIN_USER
  • APV_LOCAL_POSTGRES_ADMIN_PASSWORD
  • APV_LOCAL_POSTGRES_ADMIN_SSLMODE

Resultado:

Control Resultado
.env local existe PASS
.env ignorado por Git PASS
.env versionado por Git NO
variables admin presentes PASS
cliente psql disponible PASS
admin SELECT 1 FAIL
clasificacion segura del fallo authentication
admin puede crear DB/roles NO VALIDADO
secretos expuestos NO
decision STOP

La validacion se detuvo antes de cualquier CREATE DATABASE, CREATE ROLE, GRANT, ALTER DEFAULT PRIVILEGES o escritura de credenciales nuevas.

Reejecucion segura posterior:

Control Resultado
fecha 2026-06-11
git status -sb ## main...origin/main
git rev-parse HEAD 6607cc69f33d558cb2e5e7fab37eeea69a9f246f
.env local existe PASS
variables admin presentes PASS
cliente psql local disponible PASS
admin SELECT 1 PASS
admin CREATEDB PASS
admin CREATEROLE PASS
bases creadas NO
roles creados NO
grants o default privileges aplicados NO
gestion_de_negocios_core modificada NO
secretos expuestos NO
connection string expuesta NO
decision GATE PASS

El gate admin queda validado solamente para habilitar la preparacion de la base dedicada en una tarea posterior separada. Esta reejecucion no creo bases, schemas, roles, grants, default privileges, tablas ni datos.

5. Estado del entorno dedicado

Control Resultado
database openclaw_business_observer_dev CREADA / VALIDADA
schema business_observer CREADO / OWNER VALIDADO
rol openclaw_bo_admin CREADO / NOLOGIN / OWNER DB Y SCHEMA
rol openclaw_bo_writer CREADO / NOLOGIN / PERMISOS MINIMOS
rol openclaw_bo_reader CREADO / NOLOGIN / SOLO LECTURA
passwords nuevos generados NO
.env local actualizado con APV_BO_LOCAL_POSTGRES_* NO
.env.example actualizado con placeholders SI
default privileges configurados SI
tablas de negocio creadas NO
datos migrados desde gestion_de_negocios_core NO
filas piloto 9761 migradas NO

6. Permisos aplicados y validados

La documentacion vigente no exige LOGIN para los roles objetivo ni define secretos para passwords de esos roles. Por seguridad, los roles fueron creados como NOLOGIN.

Rol Permisos objetivo
openclaw_bo_admin owner/admin de openclaw_business_observer_dev y del schema business_observer
openclaw_bo_writer CONNECT, USAGE, SELECT, INSERT, UPDATE; sin DELETE
openclaw_bo_reader CONNECT, USAGE, SELECT; sin escritura

Default privileges configurados para objetos futuros creados por openclaw_bo_admin en business_observer:

  • tablas futuras: openclaw_bo_writer con SELECT, INSERT, UPDATE
  • tablas futuras: openclaw_bo_reader con SELECT
  • no conceder DELETE por defecto

7. Separacion con el piloto historico

Entorno Estado Lectura
gestion_de_negocios_core piloto historico validado conserva la evidencia local de SOURCE-003, con 9761 filas finales tras la ventana movil validada
openclaw_business_observer_dev entorno dedicado local creado contiene solo el schema minimo business_observer; no contiene tablas ni datos de SOURCE-003

Confirmaciones:

  • las 9761 filas del piloto historico no fueron migradas
  • no se cargo SOURCE-003
  • no se ejecuto sync
  • no se modifico gestion_de_negocios_core
  • no se toco VPS

8. Resultado final

Decision vigente: DB DEDICADA LOCAL CREADA / ROLES GRANTS VALIDADOS.

La credencial admin local declarada en .env fue revalidada sin imprimir secretos ni connection strings. El SELECT 1 paso y el rol conectado tiene capacidad CREATEDB y CREATEROLE.

Se creo o aseguro la base openclaw_business_observer_dev, el schema minimo business_observer, los roles objetivo NOLOGIN y los grants minimos. No se crearon tablas de negocio, no se insertaron datos y no se generaron ni documentaron passwords nuevos.

9. Evidencia de creacion local dedicada

Fecha local: 2026-06-11

Safe point inicial de la tarea:

Control Resultado
git status -sb ## main...origin/main [ahead 1]
git rev-parse HEAD 5490ac4d8f61fd62420c2f3facb06e6454a89bca
ultimo commit docs: record local postgres admin gate pass

Estado previo observado:

Control Resultado
.env local existe PASS
.env ignorado por Git PASS
.env versionado por Git NO
variables APV_LOCAL_POSTGRES_ADMIN_* presentes PASS
psql local disponible PASS con binario local de PostgreSQL 15
admin SELECT 1 PASS
admin CREATEDB PASS
admin CREATEROLE PASS
admin superuser PASS
database openclaw_business_observer_dev previa NO EXISTIA
rol openclaw_bo_admin previo NO EXISTIA
rol openclaw_bo_writer previo NO EXISTIA
rol openclaw_bo_reader previo NO EXISTIA
decision sobre LOGIN NOLOGIN, porque no hay requisito ni secreto documentado para passwords de roles objetivo

Accion ejecutada:

Control Resultado
database openclaw_business_observer_dev CREADA
owner database openclaw_bo_admin
schema business_observer CREADO
owner schema openclaw_bo_admin
rol openclaw_bo_admin CREADO / NOLOGIN
rol openclaw_bo_writer CREADO / NOLOGIN
rol openclaw_bo_reader CREADO / NOLOGIN
CONNECT writer/reader APLICADO
USAGE schema writer/reader APLICADO
SELECT, INSERT, UPDATE writer APLICADO A TABLAS EXISTENTES SI EXISTEN Y DEFAULT FUTURO
SELECT reader APLICADO A TABLAS EXISTENTES SI EXISTEN Y DEFAULT FUTURO
DELETE writer NO CONCEDIDO
INSERT, UPDATE, DELETE reader NO CONCEDIDOS

Validacion posterior:

Control Resultado
SELECT current_database() openclaw_business_observer_dev
owner database openclaw_bo_admin
owner schema openclaw_bo_admin
roles objetivo existen PASS
roles objetivo NOLOGIN PASS
writer CONNECT PASS
reader CONNECT PASS
writer USAGE schema PASS
reader USAGE schema PASS
writer CREATE schema NO
reader CREATE schema NO
tablas en business_observer 0
writer DELETE en tablas existentes NO
reader INSERT en tablas existentes NO
reader UPDATE en tablas existentes NO
reader DELETE en tablas existentes NO
default writer SELECT PASS
default writer INSERT PASS
default writer UPDATE PASS
default writer DELETE NO
default reader SELECT PASS
default reader INSERT NO
default reader UPDATE NO
default reader DELETE NO
business_observer.source_003_sales_items en DB dedicada NO EXISTE
SOURCE-003 cargado NO
gestion_de_negocios_core modificada NO DDL/DML EJECUTADO
VPS, Docker, OpenClaw, NPM tocados NO
secretos impresos NO
connection strings impresas NO

10. Proximo paso unico recomendado

Mantener openclaw_business_observer_dev como entorno dedicado local vacio hasta una tarea separada que apruebe explicitamente DDL, migracion piloto, carga o sync. La produccion final, SOURCE-003, sync diaria, carga masiva, VPS, Docker, OpenClaw y NPM siguen bloqueados.