mtpk-postgres 0.1.2__tar.gz → 0.1.3__tar.gz
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.
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/PKG-INFO +9 -1
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/README.md +8 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/__init__.py +1 -1
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/core_sync.py +12 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres.egg-info/PKG-INFO +9 -1
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/pyproject.toml +1 -1
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/LICENSE +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/async_adapter.py +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/crud.py +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/excepciones.py +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/interface.py +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres/utils.py +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres.egg-info/SOURCES.txt +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres.egg-info/dependency_links.txt +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres.egg-info/requires.txt +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/mtpk_postgres.egg-info/top_level.txt +0 -0
- {mtpk_postgres-0.1.2 → mtpk_postgres-0.1.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mtpk_postgres
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Librería para sincronización estructural de bases de datos Postgres con modelos Python (adaptación de mtpk_mariadb)
|
|
5
5
|
Author-email: José Jesús Andrés Zambrana <jjandres@multiplika.es>
|
|
6
6
|
License: MIT
|
|
@@ -54,6 +54,14 @@ pip install -e .
|
|
|
54
54
|
|
|
55
55
|
## Historial
|
|
56
56
|
|
|
57
|
+
- **0.1.3**: corrige un bug bloqueante en `comparar_generar_alter` — al crear una tabla nueva con una columna
|
|
58
|
+
`GENERATED ALWAYS AS (...) STORED` (p.ej. una columna de búsqueda `tsvector` calculada a partir de otra), la
|
|
59
|
+
siguiente pasada de comparación la trataba como una columna normal (la introspección no reconstruye la expresión
|
|
60
|
+
de generación) y proponía un `ALTER COLUMN` sobre ella justo después de crearla — algo que Postgres puede
|
|
61
|
+
rechazar cuando otras columnas dependen de la generada. Como `aplicar_cambios()` ejecuta todo en una única
|
|
62
|
+
transacción, ese fallo deshacía también la creación de las demás tablas. Ahora las columnas `generado` nunca se
|
|
63
|
+
comparan ni se alteran una vez existen (para cambiar su expresión hay que borrarlas y recrearlas a mano); de paso,
|
|
64
|
+
`Columna.to_sql()` ya respeta `not_null=True` en columnas generadas (antes se ignoraba).
|
|
57
65
|
- **0.1.2**: soporte nativo para columnas `VECTOR(n)` (pgvector) e índices con método (`USING gin/hnsw/...`,
|
|
58
66
|
`opclass`, `WITH (...)`) en `Index`. La introspección (`obtener_columnas_postgres`) ahora reconoce las columnas
|
|
59
67
|
`vector` por su `udt_name` y reconstruye su dimensión leyendo el catálogo (`pg_attribute`/`format_type`); sin esto,
|
|
@@ -34,6 +34,14 @@ pip install -e .
|
|
|
34
34
|
|
|
35
35
|
## Historial
|
|
36
36
|
|
|
37
|
+
- **0.1.3**: corrige un bug bloqueante en `comparar_generar_alter` — al crear una tabla nueva con una columna
|
|
38
|
+
`GENERATED ALWAYS AS (...) STORED` (p.ej. una columna de búsqueda `tsvector` calculada a partir de otra), la
|
|
39
|
+
siguiente pasada de comparación la trataba como una columna normal (la introspección no reconstruye la expresión
|
|
40
|
+
de generación) y proponía un `ALTER COLUMN` sobre ella justo después de crearla — algo que Postgres puede
|
|
41
|
+
rechazar cuando otras columnas dependen de la generada. Como `aplicar_cambios()` ejecuta todo en una única
|
|
42
|
+
transacción, ese fallo deshacía también la creación de las demás tablas. Ahora las columnas `generado` nunca se
|
|
43
|
+
comparan ni se alteran una vez existen (para cambiar su expresión hay que borrarlas y recrearlas a mano); de paso,
|
|
44
|
+
`Columna.to_sql()` ya respeta `not_null=True` en columnas generadas (antes se ignoraba).
|
|
37
45
|
- **0.1.2**: soporte nativo para columnas `VECTOR(n)` (pgvector) e índices con método (`USING gin/hnsw/...`,
|
|
38
46
|
`opclass`, `WITH (...)`) en `Index`. La introspección (`obtener_columnas_postgres`) ahora reconoce las columnas
|
|
39
47
|
`vector` por su `udt_name` y reconstruye su dimensión leyendo el catálogo (`pg_attribute`/`format_type`); sin esto,
|
|
@@ -166,6 +166,8 @@ class Columna:
|
|
|
166
166
|
|
|
167
167
|
if self.generado:
|
|
168
168
|
partes.append(f"{tipo_sql} GENERATED ALWAYS AS ({self.generado}) STORED")
|
|
169
|
+
if self.not_null:
|
|
170
|
+
partes.append("NOT NULL")
|
|
169
171
|
else:
|
|
170
172
|
partes.append(tipo_sql)
|
|
171
173
|
|
|
@@ -771,6 +773,16 @@ class Tabla:
|
|
|
771
773
|
col_real = reales.get(nombre)
|
|
772
774
|
if not col_real:
|
|
773
775
|
col_alteraciones.append(f"ADD COLUMN {col_def.to_sql()}")
|
|
776
|
+
elif col_def.generado:
|
|
777
|
+
# Las columnas GENERATED ALWAYS AS (...) STORED no se comparan ni se alteran
|
|
778
|
+
# automáticamente una vez existen: la introspección no reconstruye la expresión
|
|
779
|
+
# de generación (obtener_columnas_postgres no la lee), así que cualquier columna
|
|
780
|
+
# "normal" reconstruida a partir de una generada se compararía con datos
|
|
781
|
+
# incompletos (p.ej. sin el NOT NULL que sí lleva la generada) y dispararía un
|
|
782
|
+
# ALTER espurio — que además Postgres puede rechazar de plano si otras columnas
|
|
783
|
+
# dependen de ella. Si la expresión cambia, hay que borrar y recrear la columna
|
|
784
|
+
# a mano.
|
|
785
|
+
continue
|
|
774
786
|
elif not iguales(col_real, col_def):
|
|
775
787
|
if not tipos_iguales(col_real, col_def):
|
|
776
788
|
tipo_sql = col_def._tipo_sql()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mtpk_postgres
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Librería para sincronización estructural de bases de datos Postgres con modelos Python (adaptación de mtpk_mariadb)
|
|
5
5
|
Author-email: José Jesús Andrés Zambrana <jjandres@multiplika.es>
|
|
6
6
|
License: MIT
|
|
@@ -54,6 +54,14 @@ pip install -e .
|
|
|
54
54
|
|
|
55
55
|
## Historial
|
|
56
56
|
|
|
57
|
+
- **0.1.3**: corrige un bug bloqueante en `comparar_generar_alter` — al crear una tabla nueva con una columna
|
|
58
|
+
`GENERATED ALWAYS AS (...) STORED` (p.ej. una columna de búsqueda `tsvector` calculada a partir de otra), la
|
|
59
|
+
siguiente pasada de comparación la trataba como una columna normal (la introspección no reconstruye la expresión
|
|
60
|
+
de generación) y proponía un `ALTER COLUMN` sobre ella justo después de crearla — algo que Postgres puede
|
|
61
|
+
rechazar cuando otras columnas dependen de la generada. Como `aplicar_cambios()` ejecuta todo en una única
|
|
62
|
+
transacción, ese fallo deshacía también la creación de las demás tablas. Ahora las columnas `generado` nunca se
|
|
63
|
+
comparan ni se alteran una vez existen (para cambiar su expresión hay que borrarlas y recrearlas a mano); de paso,
|
|
64
|
+
`Columna.to_sql()` ya respeta `not_null=True` en columnas generadas (antes se ignoraba).
|
|
57
65
|
- **0.1.2**: soporte nativo para columnas `VECTOR(n)` (pgvector) e índices con método (`USING gin/hnsw/...`,
|
|
58
66
|
`opclass`, `WITH (...)`) en `Index`. La introspección (`obtener_columnas_postgres`) ahora reconoce las columnas
|
|
59
67
|
`vector` por su `udt_name` y reconstruye su dimensión leyendo el catálogo (`pg_attribute`/`format_type`); sin esto,
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mtpk_postgres"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.3"
|
|
8
8
|
description = "Librería para sincronización estructural de bases de datos Postgres con modelos Python (adaptación de mtpk_mariadb)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|