Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

db_bkp – Copia Supabase → Postgres local (192.168.100.129)

App Node.js para copiar toda la base de datos desde Supabase (pooler) hacia un Postgres local en 192.168.100.129. Detecta automáticamente diferencias de esquema, crea columnas/tablas faltantes y sincroniza secuencias.

🚀 Estado actual

  • Origen: postgres://postgres.kjtbjqxguogelslfgvju@aws-0-sa-east-1.pooler.supabase.com:6543/postgres (Supabase)
  • Destino detectado: postgres://postgres:postgres@192.168.100.129:5432/inscripciones
    • DBs disponibles en el host: api, biblioteca, cronograma, dramatiza, event_payments, inscripciones, norte, pdf_metadata, postgres, teatro, teatroapp
    • Se eligió inscripciones por ser la más compatible (18 tablas en public coinciden con Supabase).
  • Última copia verificada: ✅ 18/18 tablas idénticas (746 filas).

📦 Instalación

npm install

⚙️ Configuración

El archivo .env ya contiene DATABASE_URL (origen). Solo asegurate que tenga destino:

# Origen (ya configurado)
DATABASE_URL=postgres://postgres.kjtbjqxguogelslfgvju:xxx@aws-0-sa-east-1.pooler.supabase.com:6543/postgres?sslmode=require

# Destino – 192.168.100.129
DEST_DATABASE_URL=postgres://postgres:postgres@192.168.100.129:5432/inscripciones?sslmode=disable
# Alternativa por partes:
# DEST_DB_HOST=192.168.100.129
# DEST_DB_PORT=5432
# DEST_DB_USER=postgres
# DEST_DB_PASSWORD=postgres
# DEST_DB_NAME=inscripciones

BATCH_SIZE=1000

Si querés copiar a otra DB (ej. dramatiza), cambiá DEST_DATABASE_URL.

▶️ Uso

# Verificar conexiones
npm run test:connection
# Inspeccionar origen (tablas y conteos)
npm run inspect

# Copia normal (trunca destino y reinserta, crea columnas/tablas faltantes)
npm run copy
# o
node src/index.js

# Dry-run (no escribe)
node src/index.js --dry-run

# Recrear esquema completo (DROP + CREATE) – útil si hay drift grande
npm run copy:fresh
# o
node src/index.js --fresh

# Copiar TODOS los schemas (public + auth, storage, etc) – requiere extensiones
node src/index.js --all

# Usar pg_dump nativo (requiere postgresql-client)
# sudo apt install postgresql-client
npm run copy:pgdump
# o
node src/index.js --pgdump

Qué hace npm run copy (src/index.js:26)

  1. Conecta a origen y destino (src/db.js:3).
  2. Lista tablas (public por defecto, --all para todo).
  3. SET session_replication_role = replica para deshabilitar FKs.
  4. TRUNCATE masivo CASCADE una sola vez (evita wipes por orden).
  5. Para cada tabla:
    • Sincroniza columnas faltantes (syncMissingColumns en src/index.js:145) – ALTER TABLE ADD COLUMN + CREATE SEQUENCE si hace falta.
    • Crea tablas faltantes (email_envios, email_listas) extrayendo nextval y creando secuencias.
    • Copia en batches (default 1000) ordenado por PK o ctid, con JSON.stringify para jsonb (src/index.js:220).
  6. Sincroniza secuencias setval (src/index.js:264).
  7. Verifica conteos origen vs destino.

🔧 Scripts adicionales

  • src/testConnection.js – prueba ambas conexiones y lista tablas.
  • src/inspect.js – detalla columnas y conteos del origen.
  • src/dump.js – genera dump_YYYY-MM-DD.sql con INSERTs sin binario.
    node src/dump.js mi_backup.sql
  • src/pgDump.js – usa pg_dump/psql nativo si están instalados.

🕒 Automatizar (cron)

crontab -e
# Cada día a las 3am
0 3 * * * cd /home/mario/desarrollos/nodejs/db_bkp && /home/mario/.nvm/versions/node/v24.19.0/bin/node src/index.js >> logs/backup.log 2>&1

📝 Notas de esquema

  • Se detectó drift: asistente_planes.cuotas (jsonb) y planes_pago.cuotas no existían en destino → se agregaron automáticamente.
  • email_envios/email_listas no existían → se crearon con secuencias.
  • acreditaciones, encuentro_inscripciones, planes_pago tenían columnas faltantes → agregadas.
  • Si usás --fresh, se hace DROP TABLE CASCADE + CREATE TABLE fiel al origen (DDL generado en getTableDDL).

🗄️ Cambiar DB destino

# Probar otra DB
DEST_DATABASE_URL=postgres://postgres:postgres@192.168.100.129:5432/dramatiza?sslmode=disable npm run test:connection

📂 Estructura

.
├── .env
├── .env.example
├── package.json
├── src/
│   ├── config.js      # Lee .env, valida URLs
│   ├── db.js          # createClient, getTables, etc.
│   ├── index.js       # Copia principal
│   ├── testConnection.js
│   ├── inspect.js
│   ├── dump.js
│   └── pgDump.js
└── README.md

About

Bkp de Bd supabase

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages