@tacuchi/agent-workflow-cli 6.1.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -12
- package/dist/application/profile/profile-service.d.ts +53 -0
- package/dist/application/profile/profile-service.d.ts.map +1 -0
- package/dist/application/profile/profile-service.js +210 -0
- package/dist/application/profile/profile-service.js.map +1 -0
- package/dist/application/render/history-row.d.ts.map +1 -1
- package/dist/application/render/history-row.js +5 -0
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/self/bootstrap.js +2 -1
- package/dist/application/self/bootstrap.js.map +1 -1
- package/dist/application/self/detect-hosts.d.ts +18 -0
- package/dist/application/self/detect-hosts.d.ts.map +1 -0
- package/dist/application/self/detect-hosts.js +37 -0
- package/dist/application/self/detect-hosts.js.map +1 -0
- package/dist/application/self/install-hooks.d.ts +30 -0
- package/dist/application/self/install-hooks.d.ts.map +1 -0
- package/dist/application/self/install-hooks.js +253 -0
- package/dist/application/self/install-hooks.js.map +1 -0
- package/dist/application/self/install-skill.d.ts +2 -0
- package/dist/application/self/install-skill.d.ts.map +1 -1
- package/dist/application/self/install-skill.js +69 -3
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/session-close-service.d.ts +10 -0
- package/dist/application/session-close-service.d.ts.map +1 -1
- package/dist/application/session-close-service.js +87 -10
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/cli/commands/self.d.ts.map +1 -1
- package/dist/cli/commands/self.js +9 -1
- package/dist/cli/commands/self.js.map +1 -1
- package/dist/cli/commands/session-close.d.ts.map +1 -1
- package/dist/cli/commands/session-close.js +11 -0
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.js +100 -24
- package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
- package/package.json +2 -2
- package/skills/agent-workflow/commands/README.md +24 -0
- package/skills/agent-workflow/commands/agent-workflow-compact.md +24 -0
- package/skills/agent-workflow/commands/agent-workflow-doctor.md +100 -0
- package/skills/agent-workflow/commands/agent-workflow-export-arq.md +77 -0
- package/skills/agent-workflow/commands/agent-workflow-export-conclusions.md +78 -0
- package/skills/agent-workflow/commands/agent-workflow-export-plan.md +74 -0
- package/skills/agent-workflow/commands/agent-workflow-export-qa-note.md +30 -0
- package/skills/agent-workflow/commands/agent-workflow-export-report.md +78 -0
- package/skills/agent-workflow/commands/agent-workflow-export-requirement.md +30 -0
- package/skills/agent-workflow/commands/agent-workflow-export-scripts.md +92 -0
- package/skills/agent-workflow/commands/agent-workflow-export-tech-manuals.md +75 -0
- package/skills/agent-workflow/commands/agent-workflow-export-tech-note.md +30 -0
- package/skills/agent-workflow/commands/agent-workflow-hub-init.md +82 -0
- package/skills/agent-workflow/commands/agent-workflow-migrate.md +56 -0
- package/skills/agent-workflow/commands/agent-workflow-project-init.md +60 -0
- package/skills/agent-workflow/commands/agent-workflow-resume.md +22 -0
- package/skills/agent-workflow/commands/agent-workflow-rules.md +40 -0
- package/skills/agent-workflow/commands/agent-workflow-session.md +35 -0
- package/skills/agent-workflow/doctrine/README.md +15 -0
- package/skills/agent-workflow/doctrine/compact/SKILL.md +145 -0
- package/skills/agent-workflow/doctrine/doctor/SKILL.md +86 -0
- package/skills/agent-workflow/doctrine/doctor/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/hub-init/SKILL.md +157 -0
- package/skills/agent-workflow/doctrine/hub-init/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/hub-init/references/multiroot-manual.md +51 -0
- package/skills/agent-workflow/doctrine/implement/SKILL.md +290 -0
- package/skills/agent-workflow/doctrine/implement/references/branch-verification.md +16 -0
- package/skills/agent-workflow/doctrine/implement/references/design-md-template.md +108 -0
- package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +81 -0
- package/skills/agent-workflow/doctrine/migrate/SKILL.md +281 -0
- package/skills/agent-workflow/doctrine/migrate/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/project-init/SKILL.md +100 -0
- package/skills/agent-workflow/doctrine/project-init/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/refactor/SKILL.md +208 -0
- package/skills/agent-workflow/doctrine/refactor/references/refactor-md-template.md +108 -0
- package/skills/agent-workflow/doctrine/refactor/references/strangler-checklist.md +116 -0
- package/skills/agent-workflow/doctrine/resume/SKILL.md +199 -0
- package/skills/agent-workflow/doctrine/rules/SKILL.md +224 -0
- package/skills/agent-workflow/doctrine/rules/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/doctrine/session/SKILL.md +383 -0
- package/skills/agent-workflow/doctrine/session/references/auto-plan-rules.md +63 -0
- package/skills/agent-workflow/doctrine/session/references/backlog-template.md +95 -0
- package/skills/agent-workflow/doctrine/session/references/branch-verification.md +198 -0
- package/skills/agent-workflow/doctrine/session/references/commits-policy.md +111 -0
- package/skills/agent-workflow/doctrine/session/references/communication-style.md +50 -0
- package/skills/agent-workflow/doctrine/session/references/graduacion-routing.md +88 -0
- package/skills/agent-workflow/doctrine/session/references/lifecycle-deep.md +160 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/C1-specialty-selection.md +11 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/C2-cost-guard.md +14 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M1-closure-commit-prompt.md +104 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M10-next-step.md +17 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M11-context.md +16 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M2-branch-caso-A.md +14 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M3-branch-caso-C.md +33 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M4-cross-source-hard-gate.md +33 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M5-modality-analyze.md +15 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M6-phase-gate.md +31 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M7-refactor-legacy-detected.md +28 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M8-refactor-cleanup.md +16 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/M9-contract-review.md +39 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S1-type-design.md +15 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S2-topic-change-detection.md +14 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S3-flow-detection.md +28 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S4-resume.md +27 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S5-post-compact.md +17 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S6-scope.md +16 -0
- package/skills/agent-workflow/doctrine/session/references/prompts/S7-design-review.md +37 -0
- package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +210 -0
- package/skills/agent-workflow/doctrine/session/references/sandbox-readonly-rules.md +82 -0
- package/skills/agent-workflow/doctrine/session/references/specialty-decision-tree.md +56 -0
- package/skills/agent-workflow/doctrine/session/references/topic-change-rules.md +67 -0
- package/skills/agent-workflow/exports/README.md +15 -0
- package/skills/agent-workflow/exports/export-arq/SKILL.md +229 -0
- package/skills/agent-workflow/exports/export-arq/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/exports/export-arq/references/lexico-tecnico.md +94 -0
- package/skills/agent-workflow/exports/export-arq/references/template-c4.md +293 -0
- package/skills/agent-workflow/exports/export-arq/references/template-plantuml.puml +77 -0
- package/skills/agent-workflow/exports/export-arq/references/template-structurizr.dsl +72 -0
- package/skills/agent-workflow/exports/export-arq/references/validations.md +231 -0
- package/skills/agent-workflow/exports/export-conclusions/SKILL.md +169 -0
- package/skills/agent-workflow/exports/export-conclusions/references/dedup-rules.md +154 -0
- package/skills/agent-workflow/exports/export-conclusions/references/template-conclusions.md +158 -0
- package/skills/agent-workflow/exports/export-plan/SKILL.md +225 -0
- package/skills/agent-workflow/exports/export-plan/references/state-transitions.md +141 -0
- package/skills/agent-workflow/exports/export-plan/references/template-plan.md +132 -0
- package/skills/agent-workflow/exports/export-qa-note/SKILL.md +31 -0
- package/skills/agent-workflow/exports/export-report/SKILL.md +262 -0
- package/skills/agent-workflow/exports/export-report/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/exports/export-report/references/lexico.md +174 -0
- package/skills/agent-workflow/exports/export-report/references/template-a.md +95 -0
- package/skills/agent-workflow/exports/export-report/references/template-b.md +221 -0
- package/skills/agent-workflow/exports/export-report/references/template-c.md +180 -0
- package/skills/agent-workflow/exports/export-report/references/validations.md +255 -0
- package/skills/agent-workflow/exports/export-requirement/SKILL.md +31 -0
- package/skills/agent-workflow/exports/export-scripts/SKILL.md +324 -0
- package/skills/agent-workflow/exports/export-scripts/references/code-scan-recommendations.md +83 -0
- package/skills/agent-workflow/exports/export-scripts/references/deprecation-plan.md +80 -0
- package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +80 -0
- package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +253 -0
- package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +79 -0
- package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +168 -0
- package/skills/agent-workflow/exports/export-scripts/references/validations.md +242 -0
- package/skills/agent-workflow/exports/export-tech-manuals/SKILL.md +214 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/lexico-tecnico.md +97 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/template-index.md +123 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/template-manual.md +143 -0
- package/skills/agent-workflow/exports/export-tech-manuals/references/validations.md +211 -0
- package/skills/agent-workflow/exports/export-tech-note/SKILL.md +31 -0
- package/skills/agent-workflow/hooks/README.md +15 -0
- package/skills/agent-workflow/hooks/hooks.template.json +90 -0
- package/skills/agent-workflow/references/README.md +12 -0
- package/skills/agent-workflow/references/legacy-anchors.md +50 -0
- package/skills/agent-workflow/references/profile-parametrization.md +88 -0
- package/skills/agent-workflow/specialties/README.md +14 -0
- package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +175 -0
- package/skills/agent-workflow/specialties/analyze-conclude/references/incident-classification.md +61 -0
- package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md +148 -0
- package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/specialties/analyze-investigate/references/cost-guard.md +85 -0
- package/skills/agent-workflow/specialties/analyze-synthesize/SKILL.md +127 -0
- package/skills/agent-workflow/specialties/design-brief/SKILL.md +90 -0
- package/skills/agent-workflow/specialties/design-deliver/SKILL.md +121 -0
- package/skills/agent-workflow/specialties/design-develop/SKILL.md +115 -0
- package/skills/agent-workflow/specialties/design-discover/SKILL.md +103 -0
- package/skills/agent-workflow/standards/README.md +12 -0
- package/skills/agent-workflow/standards/coding-standards/SKILL.md +102 -0
- package/skills/agent-workflow/standards/coding-standards/SKILL.md.tmp +0 -0
- package/skills/agent-workflow/standards/coding-standards/references/angular-typescript.md +266 -0
- package/skills/agent-workflow/standards/coding-standards/references/database-conventions.md +170 -0
- package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +300 -0
- package/skills/agent-workflow/standards/coding-standards/references/frontend-structure.md +182 -0
- package/skills/agent-workflow/standards/coding-standards/references/java-spring.md +244 -0
- package/skills/agent-workflow/standards/coding-standards/references/project-structure.md +197 -0
- package/skills/agent-workflow/standards/frontend-design/SKILL.md +62 -0
- package/skills/agent-workflow/standards/frontend-design/references/feedback-toasts-patterns.md +249 -0
- package/skills/agent-workflow/standards/frontend-design/references/form-patterns.md +278 -0
- package/skills/agent-workflow/standards/frontend-design/references/list-patterns.md +256 -0
- package/skills/agent-workflow/standards/frontend-design/references/modal-patterns.md +220 -0
- package/skills/agent-workflow/standards/frontend-design/references/navigation-patterns.md +224 -0
- package/skills/agent-workflow/standards/redaccion-simple/SKILL.md +128 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +197 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md +161 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +131 -0
- package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +255 -0
- package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +244 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/bundle-readme-template.md +82 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/categorization-rules.md +122 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/consolidation-cross-session.md +125 -0
- package/skills/agent-workflow/standards/sql-script-organizer/references/scripts-sql-format.md +140 -0
- package/skills/agent-workflow/standards/testing-strategy/SKILL.md +113 -0
- package/skills/agent-workflow/standards/testing-strategy/references/test-levels.md +255 -0
- package/skills/agent-workflow/workflows/README.md +12 -0
- package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +107 -0
- package/skills/agent-workflow/workflows/design-workflow/SKILL.md +100 -0
- package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +195 -0
package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Checklist de Operaciones Irreversibles
|
|
2
|
+
|
|
3
|
+
Operaciones que no pueden revertirse automáticamente. Requieren protocolo especial antes de ejecutar.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Protocolo ante una operación irreversible
|
|
8
|
+
|
|
9
|
+
Antes de ejecutar cualquier operación de esta lista:
|
|
10
|
+
|
|
11
|
+
1. **Agregar `-- WARNING: IRREVERSIBLE`** en el header del forward script
|
|
12
|
+
2. **Crear script de respaldo** si hay datos en riesgo (ver plantillas en `rollback-patterns.md`)
|
|
13
|
+
3. **Registrar en `DECISIONS.md`** de la sesión:
|
|
14
|
+
- Qué se va a ejecutar
|
|
15
|
+
- Por qué no es reversible
|
|
16
|
+
- Qué backup existe (o por qué no aplica)
|
|
17
|
+
- Confirmación explícita del usuario
|
|
18
|
+
4. **Generar rollback best-effort** con nota `-- RESTAURACIÓN MANUAL REQUERIDA` si el rollback automático no es posible
|
|
19
|
+
5. **Checkpoint**: el usuario debe confirmar explícitamente antes de continuar
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Lista de operaciones irreversibles
|
|
24
|
+
|
|
25
|
+
### TRUNCATE TABLE
|
|
26
|
+
|
|
27
|
+
```sql
|
|
28
|
+
-- WARNING: IRREVERSIBLE
|
|
29
|
+
-- Elimina TODOS los datos de la tabla sin posibilidad de rollback transaccional en algunos motores.
|
|
30
|
+
-- En PostgreSQL se puede envolver en BEGIN/COMMIT, pero el efecto es inmediato si se confirma.
|
|
31
|
+
-- Respaldo obligatorio en esq_audit antes de ejecutar.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Mitigación**: `CREATE TABLE esq_audit.tb_bkp_x_sessionXXX AS SELECT * FROM esq_.tb_x;` antes.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### DROP COLUMN sin respaldo previo
|
|
39
|
+
|
|
40
|
+
```sql
|
|
41
|
+
-- WARNING: IRREVERSIBLE
|
|
42
|
+
-- La columna y sus datos se pierden permanentemente.
|
|
43
|
+
-- Respaldo: ALTER TABLE tb_x ADD COLUMN col_bkp ... + UPDATE SET col_bkp = col_original;
|
|
44
|
+
-- o bien: CREATE TABLE esq_audit.tb_bkp_x_col_sessionXXX AS SELECT id, col FROM tb_x;
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Mitigación**: copiar los valores a una columna temporal o tabla de backup antes del DROP.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### DROP TABLE sin respaldo previo
|
|
52
|
+
|
|
53
|
+
```sql
|
|
54
|
+
-- WARNING: IRREVERSIBLE
|
|
55
|
+
-- La tabla y todos sus datos, índices, constraints y sequences asociados se pierden.
|
|
56
|
+
-- Respaldo obligatorio: CREATE TABLE esq_audit.tb_bkp_x_sessionXXX AS SELECT * FROM esq_.tb_x;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### ALTER COLUMN TYPE con pérdida de precisión
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
-- WARNING: IRREVERSIBLE
|
|
65
|
+
-- Cambiar de varchar(500) a varchar(50) trunca datos. Cambiar de numeric(18,4) a integer pierde decimales.
|
|
66
|
+
-- Verificar que no hay datos que excedan el nuevo tamaño/precisión ANTES de ejecutar.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Mitigación**:
|
|
70
|
+
```sql
|
|
71
|
+
-- Verificar antes:
|
|
72
|
+
SELECT COUNT(*) FROM esq_.tb_x WHERE length(col_x) > 50;
|
|
73
|
+
SELECT COUNT(*) FROM esq_.tb_x WHERE col_x != FLOOR(col_x);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### DROP ... CASCADE
|
|
79
|
+
|
|
80
|
+
```sql
|
|
81
|
+
-- WARNING: IRREVERSIBLE
|
|
82
|
+
-- Elimina el objeto Y todos los objetos que dependen de él (views, funciones, constraints).
|
|
83
|
+
-- Listar dependencias antes: SELECT * FROM information_schema.constraint_column_usage WHERE table_name = 'tb_x';
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Mitigación**: antes de ejecutar, listar todas las dependencias y generar los scripts para recrearlas.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### DELETE sin WHERE (o con WHERE muy amplio)
|
|
91
|
+
|
|
92
|
+
```sql
|
|
93
|
+
-- WARNING: IRREVERSIBLE
|
|
94
|
+
-- Un DELETE sin cláusula WHERE o con condición demasiado amplia puede vaciar una tabla.
|
|
95
|
+
-- Respaldo obligatorio: CREATE TABLE esq_audit.tb_bkp_x_sessionXXX AS SELECT * FROM esq_.tb_x WHERE <condicion>;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Verificación previa recomendada**:
|
|
99
|
+
```sql
|
|
100
|
+
-- Ejecutar primero como SELECT para ver qué filas afecta:
|
|
101
|
+
SELECT COUNT(*) FROM esq_.tb_x WHERE <condicion_del_delete>;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### UPDATE sin WHERE sobre tabla grande
|
|
107
|
+
|
|
108
|
+
```sql
|
|
109
|
+
-- WARNING: ALTA SUPERFICIE DE IMPACTO
|
|
110
|
+
-- Un UPDATE sin WHERE o con condición muy amplia modifica todas las filas.
|
|
111
|
+
-- Si es intencional, documentarlo explícitamente en DECISIONS.md.
|
|
112
|
+
-- Respaldo obligatorio antes de ejecutar.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Eliminar función sin versión anterior conocida
|
|
118
|
+
|
|
119
|
+
```sql
|
|
120
|
+
-- WARNING: IRREVERSIBLE
|
|
121
|
+
-- Si no hay registro de la versión anterior de la función (no está en el repo ni en la sesión),
|
|
122
|
+
-- no es posible generar un rollback automático.
|
|
123
|
+
-- El rollback best-effort debe incluir el cuerpo actual en un comentario para restauración manual.
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### Cambiar tipo de columna con conversión destructiva
|
|
129
|
+
|
|
130
|
+
Por ejemplo: `varchar` → `integer` donde algunos valores no son números; `timestamp` → `date` perdiendo la hora.
|
|
131
|
+
|
|
132
|
+
**Mitigación**:
|
|
133
|
+
```sql
|
|
134
|
+
-- Verificar antes:
|
|
135
|
+
SELECT col_x FROM esq_.tb_x WHERE col_x !~ '^\d+$'; -- filas que no son números
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Formato del header para scripts irreversibles
|
|
141
|
+
|
|
142
|
+
```sql
|
|
143
|
+
-- Archivo: 001-elimina-col-legacy-tb-credito.sql
|
|
144
|
+
-- Sesión: sessionXXX-nombre-kebab (YYYY-MM-DD)
|
|
145
|
+
-- WARNING: IRREVERSIBLE — DROP COLUMN sin restauración automática posible
|
|
146
|
+
-- Respaldo: esq_audit.tb_bkp_credito_col_legacy_sessionXXX (creado en 000-backup.sql)
|
|
147
|
+
-- Decisión: DECISIONS.md DEC-XXX — aprobado por [usuario]
|
|
148
|
+
BEGIN;
|
|
149
|
+
-- cuerpo del script
|
|
150
|
+
COMMIT;
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Verificaciones antes de ejecutar en producción
|
|
156
|
+
|
|
157
|
+
- [ ] El script de respaldo fue ejecutado y verificado (`SELECT COUNT(*) FROM esq_audit.tb_bkp_...`)
|
|
158
|
+
- [ ] La decisión está registrada en `DECISIONS.md`
|
|
159
|
+
- [ ] El usuario confirmó explícitamente la ejecución
|
|
160
|
+
- [ ] Se tiene el rollback best-effort documentado (aunque sea manual)
|
|
161
|
+
- [ ] Se notificó al equipo si el cambio afecta a otros servicios
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Rollback global de release y por tema
|
|
2
|
+
|
|
3
|
+
Algoritmos detallados para rollbacks consolidados en modo release. El SKILL.md tiene el resumen; este archivo tiene el procedimiento completo paso a paso.
|
|
4
|
+
|
|
5
|
+
## Rollback global de release (cross-session)
|
|
6
|
+
|
|
7
|
+
`docs/release/NNN-release-YYYY-MM-DD/scripts/rollback/00-rollback-release.sql` revierte el release completo.
|
|
8
|
+
|
|
9
|
+
### Principio
|
|
10
|
+
|
|
11
|
+
Revertir en **orden inverso absoluto**:
|
|
12
|
+
- Sesiones: última → primera (session_N → … → session_1).
|
|
13
|
+
- Dentro de cada sesión: 04 → 03 → 02 → 01 (contrario al de ejecución).
|
|
14
|
+
|
|
15
|
+
### Proceso
|
|
16
|
+
|
|
17
|
+
1. Recolectar todos los `.rollback.sql` del bundle consolidado.
|
|
18
|
+
2. Ordenar inversamente: primero todos los rollbacks de la sesión más reciente (04→01), luego la anterior, etc.
|
|
19
|
+
3. Encadenar en un único archivo:
|
|
20
|
+
|
|
21
|
+
```sql
|
|
22
|
+
-- Rollback global del Release NNN (YYYY-MM-DD)
|
|
23
|
+
-- Cubre N sesiones desde sessionXXX hasta sessionYYY
|
|
24
|
+
BEGIN;
|
|
25
|
+
|
|
26
|
+
-- sessionYYY-nombre (última)
|
|
27
|
+
-- 04-inserts
|
|
28
|
+
[contenido en orden inverso]
|
|
29
|
+
-- 03-migracion
|
|
30
|
+
[contenido en orden inverso]
|
|
31
|
+
-- 02-ddl-funciones
|
|
32
|
+
[contenido en orden inverso]
|
|
33
|
+
-- 01-ddl-tablas
|
|
34
|
+
[contenido en orden inverso]
|
|
35
|
+
|
|
36
|
+
-- sessionXXX-nombre-previo
|
|
37
|
+
[misma estructura]
|
|
38
|
+
|
|
39
|
+
COMMIT;
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
4. Preservar marcas `-- WARNING: IRREVERSIBLE` con contexto (sesión origen).
|
|
43
|
+
5. Listar irreversibles al inicio antes del `BEGIN;`:
|
|
44
|
+
|
|
45
|
+
```sql
|
|
46
|
+
-- ADVERTENCIA: Este release contiene [N] operaciones irreversibles:
|
|
47
|
+
-- - sessionXXX / 03-migracion/001-*.sql — DROP COLUMN (mitigación: esq_audit.tb_bkp_*_sessionXXX)
|
|
48
|
+
-- - sessionYYY / 01-ddl-tablas/002-*.sql — DROP TABLE CASCADE (mitigación: sin respaldo)
|
|
49
|
+
-- Revisar docs/release/NNN-informe-release.md sección 4.2 antes de ejecutar.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Qué NO hacer
|
|
53
|
+
|
|
54
|
+
- Fusionar rollbacks de distintas sesiones sobre la misma tabla — dejar cada bloque independiente.
|
|
55
|
+
- Cambiar el orden inverso — puede dejar referencias colgando.
|
|
56
|
+
- Ejecutar el rollback desde el plugin. Siempre manual por el usuario.
|
|
57
|
+
|
|
58
|
+
### Verificación mínima
|
|
59
|
+
|
|
60
|
+
- Orden inverso absoluto respetado (sesiones descendente, categorías 04→01).
|
|
61
|
+
- Operaciones irreversibles listadas al inicio.
|
|
62
|
+
- Archivo abre con `BEGIN;` y cierra con `COMMIT;`.
|
|
63
|
+
- Cada bloque de sesión delimitado con `-- === sessionXXX ===`.
|
|
64
|
+
- Headers de respaldo preservados donde aplica.
|
|
65
|
+
|
|
66
|
+
## Rollback por tema (delegado por release-scripts)
|
|
67
|
+
|
|
68
|
+
Tres niveles:
|
|
69
|
+
|
|
70
|
+
1. **Consolidado por categoría**: `tema-<slug>/<categoria>.rollback.sql` concatena rollbacks de scripts fuente en orden inverso, envuelto en `BEGIN; … COMMIT;`.
|
|
71
|
+
2. **Por-tema**: `tema-<slug>/rollback-tema-<slug>.sql` encadena los 4 consolidados (04→03→02→01).
|
|
72
|
+
3. **Global del release**: `rollback/00-rollback-release.sql` encadena rollbacks por-tema en orden inverso a `ORDER.md`.
|
|
73
|
+
|
|
74
|
+
### Generación del consolidado por categoría
|
|
75
|
+
|
|
76
|
+
1. Recolectar `.rollback.sql` correspondientes al consolidado forward.
|
|
77
|
+
2. Ordenar inversamente: último script primero.
|
|
78
|
+
3. Eliminar `BEGIN;`/`COMMIT;` de cada rollback individual.
|
|
79
|
+
4. Concatenar con separadores `[i/N]`.
|
|
80
|
+
5. Envolver en un único `BEGIN; … COMMIT;`.
|
|
81
|
+
|
|
82
|
+
### Generación del rollback por-tema
|
|
83
|
+
|
|
84
|
+
```sql
|
|
85
|
+
-- Rollback del tema <slug> — Release NNN (revierte 04→01)
|
|
86
|
+
BEGIN;
|
|
87
|
+
|
|
88
|
+
-- 04-inserts
|
|
89
|
+
[contenido sin BEGIN/COMMIT]
|
|
90
|
+
|
|
91
|
+
-- 03-migracion
|
|
92
|
+
[contenido sin BEGIN/COMMIT]
|
|
93
|
+
|
|
94
|
+
-- 02-ddl-funciones
|
|
95
|
+
[contenido sin BEGIN/COMMIT]
|
|
96
|
+
|
|
97
|
+
-- 01-ddl-tablas
|
|
98
|
+
[contenido sin BEGIN/COMMIT]
|
|
99
|
+
|
|
100
|
+
COMMIT;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Preservar marcas `-- WARNING: IRREVERSIBLE` y listarlas al inicio.
|
|
104
|
+
|
|
105
|
+
### Generación del global
|
|
106
|
+
|
|
107
|
+
1. Tomar `rollback-tema-<slug>.sql` de todos los temas.
|
|
108
|
+
2. Ordenar inversamente al de `ORDER.md`.
|
|
109
|
+
3. Encadenar inline (no `\i` includes) en un único `BEGIN; … COMMIT;`.
|
|
110
|
+
4. Listar irreversibles al inicio agrupadas por tema origen.
|
|
111
|
+
|
|
112
|
+
### Multi-tema en rollback
|
|
113
|
+
|
|
114
|
+
Scripts multi-tema se incluyen sólo en el consolidado del tema canónico. Su rollback aparece sólo allí; los demás temas no lo duplican. El global lo incluye una vez.
|
|
115
|
+
|
|
116
|
+
### Qué NO hacer
|
|
117
|
+
|
|
118
|
+
- Duplicar contenido entre consolidados.
|
|
119
|
+
- Cambiar el orden de categorías dentro del rollback por-tema (siempre 04→03→02→01).
|
|
120
|
+
- Generar consolidados de rollback para categorías sin forwards.
|
|
121
|
+
- Dejar `BEGIN;`/`COMMIT;` de scripts individuales dentro de los consolidados.
|
|
122
|
+
|
|
123
|
+
### Verificación mínima
|
|
124
|
+
|
|
125
|
+
- Cada consolidado forward tiene su rollback consolidado.
|
|
126
|
+
- Bloques en orden inverso al forward.
|
|
127
|
+
- Cada tema con scripts tiene su `rollback-tema-<slug>.sql`.
|
|
128
|
+
- El global encadena en orden inverso a `ORDER.md`.
|
|
129
|
+
- Irreversibles listados al inicio del global, agrupados por tema origen.
|
|
130
|
+
- Ningún rollback multi-tema duplicado.
|
|
131
|
+
- Cada archivo abre con `BEGIN;` y cierra con `COMMIT;` (uno solo por archivo).
|
package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Patrones de Rollback SQL
|
|
2
|
+
|
|
3
|
+
Recetas por tipo de operación. Motor primario: **PostgreSQL**. Se incluyen equivalencias para otros motores donde difieren.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## DDL de Tablas
|
|
8
|
+
|
|
9
|
+
### CREATE TABLE → DROP TABLE
|
|
10
|
+
|
|
11
|
+
```sql
|
|
12
|
+
-- Forward
|
|
13
|
+
BEGIN;
|
|
14
|
+
CREATE TABLE IF NOT EXISTS esq_credito.tb_nueva (
|
|
15
|
+
id_nueva integer NOT NULL DEFAULT nextval('esq_credito.seq_tb_nueva'),
|
|
16
|
+
nombre varchar(100) NOT NULL,
|
|
17
|
+
estado integer NOT NULL DEFAULT 1,
|
|
18
|
+
CONSTRAINT pk_tb_nueva PRIMARY KEY (id_nueva)
|
|
19
|
+
);
|
|
20
|
+
COMMIT;
|
|
21
|
+
|
|
22
|
+
-- Rollback
|
|
23
|
+
BEGIN;
|
|
24
|
+
DROP TABLE IF EXISTS esq_credito.tb_nueva;
|
|
25
|
+
DROP SEQUENCE IF EXISTS esq_credito.seq_tb_nueva; -- si la secuencia fue creada junto a la tabla
|
|
26
|
+
COMMIT;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### ALTER TABLE ADD COLUMN → DROP COLUMN
|
|
30
|
+
|
|
31
|
+
```sql
|
|
32
|
+
-- Forward
|
|
33
|
+
BEGIN;
|
|
34
|
+
ALTER TABLE esq_credito.tb_credito
|
|
35
|
+
ADD COLUMN IF NOT EXISTS flag_reestructurado integer NOT NULL DEFAULT 0;
|
|
36
|
+
COMMIT;
|
|
37
|
+
|
|
38
|
+
-- Rollback
|
|
39
|
+
BEGIN;
|
|
40
|
+
ALTER TABLE esq_credito.tb_credito
|
|
41
|
+
DROP COLUMN IF EXISTS flag_reestructurado;
|
|
42
|
+
COMMIT;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### DROP TABLE (con respaldo previo)
|
|
46
|
+
|
|
47
|
+
```sql
|
|
48
|
+
-- 000-backup-tb-x.sql (siempre antes del DROP)
|
|
49
|
+
BEGIN;
|
|
50
|
+
CREATE TABLE IF NOT EXISTS esq_audit.tb_bkp_credito_sessionXXX
|
|
51
|
+
AS SELECT * FROM esq_credito.tb_credito_legacy;
|
|
52
|
+
COMMIT;
|
|
53
|
+
|
|
54
|
+
-- Forward
|
|
55
|
+
BEGIN;
|
|
56
|
+
DROP TABLE IF EXISTS esq_credito.tb_credito_legacy;
|
|
57
|
+
COMMIT;
|
|
58
|
+
|
|
59
|
+
-- Rollback
|
|
60
|
+
BEGIN;
|
|
61
|
+
CREATE TABLE IF NOT EXISTS esq_credito.tb_credito_legacy
|
|
62
|
+
AS SELECT * FROM esq_audit.tb_bkp_credito_sessionXXX;
|
|
63
|
+
-- Restaurar constraints si aplica:
|
|
64
|
+
ALTER TABLE esq_credito.tb_credito_legacy
|
|
65
|
+
ADD CONSTRAINT pk_tb_credito_legacy PRIMARY KEY (id_credito_legacy);
|
|
66
|
+
COMMIT;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### CREATE INDEX → DROP INDEX
|
|
70
|
+
|
|
71
|
+
```sql
|
|
72
|
+
-- Forward
|
|
73
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tb_credito_cliente
|
|
74
|
+
ON esq_credito.tb_credito(id_cliente);
|
|
75
|
+
|
|
76
|
+
-- Rollback
|
|
77
|
+
DROP INDEX CONCURRENTLY IF EXISTS esq_credito.idx_tb_credito_cliente;
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
> `CONCURRENTLY` no puede ir dentro de `BEGIN/COMMIT` en PostgreSQL — ejecutar fuera de transacción o sin `CONCURRENTLY` dentro de transacción.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## DDL de Funciones y SP
|
|
85
|
+
|
|
86
|
+
### CREATE OR REPLACE FUNCTION → DROP FUNCTION
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- Forward
|
|
90
|
+
BEGIN;
|
|
91
|
+
CREATE OR REPLACE FUNCTION esq_credito.fn_calcular_cuota_v2(
|
|
92
|
+
p_monto numeric,
|
|
93
|
+
p_tasa numeric,
|
|
94
|
+
p_plazo integer
|
|
95
|
+
) RETURNS numeric
|
|
96
|
+
LANGUAGE plpgsql AS $$
|
|
97
|
+
BEGIN
|
|
98
|
+
RETURN p_monto * (p_tasa / 12) / (1 - POWER(1 + p_tasa / 12, -p_plazo));
|
|
99
|
+
END;
|
|
100
|
+
$$;
|
|
101
|
+
COMMIT;
|
|
102
|
+
|
|
103
|
+
-- Rollback: eliminar nueva versión y restaurar la anterior (si existe)
|
|
104
|
+
BEGIN;
|
|
105
|
+
DROP FUNCTION IF EXISTS esq_credito.fn_calcular_cuota_v2(numeric, numeric, integer);
|
|
106
|
+
-- Si existía v1, recrear aquí:
|
|
107
|
+
-- CREATE OR REPLACE FUNCTION esq_credito.fn_calcular_cuota(...) ...
|
|
108
|
+
COMMIT;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> **Siempre incluir la firma completa en `DROP FUNCTION`** (tipos de parámetros). PostgreSQL puede tener múltiples sobrecargas del mismo nombre.
|
|
112
|
+
|
|
113
|
+
### DROP FUNCTION irreversible
|
|
114
|
+
|
|
115
|
+
```sql
|
|
116
|
+
-- WARNING: IRREVERSIBLE — no hay versión anterior registrada
|
|
117
|
+
-- Rollback best-effort: cuerpo de la función para restauración manual
|
|
118
|
+
BEGIN;
|
|
119
|
+
DROP FUNCTION IF EXISTS esq_credito.fn_legacy(integer);
|
|
120
|
+
COMMIT;
|
|
121
|
+
|
|
122
|
+
/*
|
|
123
|
+
RESTAURACIÓN MANUAL si se necesita revertir:
|
|
124
|
+
CREATE OR REPLACE FUNCTION esq_credito.fn_legacy(p_id integer)
|
|
125
|
+
RETURNS void LANGUAGE plpgsql AS $$
|
|
126
|
+
BEGIN
|
|
127
|
+
-- [cuerpo de la función aquí]
|
|
128
|
+
END;
|
|
129
|
+
$$;
|
|
130
|
+
*/
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Migración de Datos
|
|
136
|
+
|
|
137
|
+
### UPDATE masivo → restaurar desde backup
|
|
138
|
+
|
|
139
|
+
```sql
|
|
140
|
+
-- 000-backup-tb-credito.sql
|
|
141
|
+
BEGIN;
|
|
142
|
+
CREATE TABLE IF NOT EXISTS esq_audit.tb_bkp_credito_sessionXXX AS
|
|
143
|
+
SELECT id_credito, estado, estado_proceso
|
|
144
|
+
FROM esq_credito.tb_credito
|
|
145
|
+
WHERE estado = 0 AND fecha_registro < '2024-01-01';
|
|
146
|
+
COMMIT;
|
|
147
|
+
|
|
148
|
+
-- Forward: migración
|
|
149
|
+
BEGIN;
|
|
150
|
+
UPDATE esq_credito.tb_credito
|
|
151
|
+
SET estado = 2
|
|
152
|
+
WHERE estado = 0 AND fecha_registro < '2024-01-01';
|
|
153
|
+
COMMIT;
|
|
154
|
+
|
|
155
|
+
-- Rollback: restaurar desde backup
|
|
156
|
+
BEGIN;
|
|
157
|
+
UPDATE esq_credito.tb_credito t
|
|
158
|
+
SET estado = bkp.estado
|
|
159
|
+
FROM esq_audit.tb_bkp_credito_sessionXXX bkp
|
|
160
|
+
WHERE t.id_credito = bkp.id_credito;
|
|
161
|
+
COMMIT;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### INSERT ... SELECT → DELETE por rango
|
|
165
|
+
|
|
166
|
+
```sql
|
|
167
|
+
-- Forward: poblar tabla destino desde origen
|
|
168
|
+
BEGIN;
|
|
169
|
+
INSERT INTO esq_credito.tb_credito_nuevo (id_credito, monto, estado)
|
|
170
|
+
SELECT id_credito, monto_prestamo, 1
|
|
171
|
+
FROM esq_credito.tb_credito_legacy
|
|
172
|
+
WHERE flag_migrado = 0;
|
|
173
|
+
COMMIT;
|
|
174
|
+
|
|
175
|
+
-- Rollback: eliminar solo los registros insertados en esta sesión
|
|
176
|
+
BEGIN;
|
|
177
|
+
DELETE FROM esq_credito.tb_credito_nuevo
|
|
178
|
+
WHERE id_credito IN (
|
|
179
|
+
SELECT id_credito FROM esq_credito.tb_credito_legacy WHERE flag_migrado = 0
|
|
180
|
+
);
|
|
181
|
+
COMMIT;
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Inserts de datos nuevos
|
|
187
|
+
|
|
188
|
+
### INSERT simple → DELETE por clave natural
|
|
189
|
+
|
|
190
|
+
```sql
|
|
191
|
+
-- Forward
|
|
192
|
+
BEGIN;
|
|
193
|
+
INSERT INTO esq_sistema.tb_maestra_detalle
|
|
194
|
+
(id_maestra, codprog, descripcion, valor, estado, usuario_registro, fecha_registro)
|
|
195
|
+
VALUES
|
|
196
|
+
(1, 'EST_SOLICITUD', 'Pendiente', 1, 1, 'session_deploy', NOW()),
|
|
197
|
+
(1, 'EST_SOLICITUD', 'Aprobada', 2, 1, 'session_deploy', NOW()),
|
|
198
|
+
(1, 'EST_SOLICITUD', 'Rechazada', 3, 1, 'session_deploy', NOW())
|
|
199
|
+
ON CONFLICT DO NOTHING;
|
|
200
|
+
COMMIT;
|
|
201
|
+
|
|
202
|
+
-- Rollback
|
|
203
|
+
BEGIN;
|
|
204
|
+
DELETE FROM esq_sistema.tb_maestra_detalle
|
|
205
|
+
WHERE codprog = 'EST_SOLICITUD'
|
|
206
|
+
AND valor IN (1, 2, 3)
|
|
207
|
+
AND usuario_registro = 'session_deploy';
|
|
208
|
+
COMMIT;
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Bundle global (`00-rollback-global.sql`)
|
|
214
|
+
|
|
215
|
+
```sql
|
|
216
|
+
-- ROLLBACK GLOBAL — sessionXXX-[nombre]
|
|
217
|
+
-- Revierte TODOS los cambios en orden inverso. Ejecutar sólo para deshacer la sesión completa.
|
|
218
|
+
BEGIN;
|
|
219
|
+
|
|
220
|
+
-- Paso 4 invertido: deshacer inserts
|
|
221
|
+
DELETE FROM esq_sistema.tb_maestra_detalle
|
|
222
|
+
WHERE codprog = 'EST_SOLICITUD' AND usuario_registro = 'session_deploy';
|
|
223
|
+
|
|
224
|
+
-- Paso 3 invertido: deshacer migraciones
|
|
225
|
+
UPDATE esq_credito.tb_credito t
|
|
226
|
+
SET estado = bkp.estado
|
|
227
|
+
FROM esq_audit.tb_bkp_credito_sessionXXX bkp
|
|
228
|
+
WHERE t.id_credito = bkp.id_credito;
|
|
229
|
+
|
|
230
|
+
-- Paso 2 invertido: eliminar funciones nuevas
|
|
231
|
+
DROP FUNCTION IF EXISTS esq_credito.fn_calcular_cuota_v2(numeric, numeric, integer);
|
|
232
|
+
|
|
233
|
+
-- Paso 1 invertido: eliminar tablas nuevas
|
|
234
|
+
DROP TABLE IF EXISTS esq_credito.tb_nueva;
|
|
235
|
+
DROP SEQUENCE IF EXISTS esq_credito.seq_tb_nueva;
|
|
236
|
+
|
|
237
|
+
COMMIT;
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Equivalencias entre motores
|
|
243
|
+
|
|
244
|
+
| Concepto | PostgreSQL | Oracle | SQL Server |
|
|
245
|
+
|---|---|---|---|
|
|
246
|
+
| Idempotencia CREATE TABLE | `CREATE TABLE IF NOT EXISTS` | `BEGIN EXECUTE IMMEDIATE ... EXCEPTION WHEN OTHERS THEN NULL; END;` | `IF NOT EXISTS (SELECT...) CREATE TABLE` |
|
|
247
|
+
| Idempotencia DROP | `DROP TABLE IF EXISTS` | No nativo — usar bloque PL/SQL | `DROP TABLE IF EXISTS` (2016+) |
|
|
248
|
+
| Create o reemplazar función | `CREATE OR REPLACE FUNCTION` | `CREATE OR REPLACE FUNCTION` | `CREATE OR ALTER PROCEDURE` |
|
|
249
|
+
| Insertar sin duplicar | `ON CONFLICT DO NOTHING` | `INSERT INTO ... WHERE NOT EXISTS (SELECT 1 ...)` | `IF NOT EXISTS (SELECT 1 ...) INSERT` |
|
|
250
|
+
| Esquema explícito | `esq_credito.tb_x` | `schema.tb_x` | `[schema].[tb_x]` |
|
|
251
|
+
| Secuencias | `CREATE SEQUENCE` / `nextval(...)` | `CREATE SEQUENCE` / `.NEXTVAL` | `IDENTITY` o `SEQUENCE` (2012+) |
|
|
252
|
+
| Transacción | `BEGIN; ... COMMIT;` | `-- implícita; usar COMMIT;` | `BEGIN TRANSACTION; ... COMMIT;` |
|
|
253
|
+
| Creación condicional índice | `CREATE INDEX IF NOT EXISTS` | No nativo | `IF NOT EXISTS (SELECT...) CREATE INDEX` |
|
|
254
|
+
|
|
255
|
+
> Si el motor de destino no es PostgreSQL, indicarlo en el header del script y ajustar la sintaxis según la tabla anterior.
|