Hay algo similar al pack en MySql o MariaDB?

146 views
Skip to first unread message

acmc

unread,
May 4, 2017, 10:26:22 AM5/4/17
to Comunidad de Visual Foxpro en Español
Salu2 Foxeros,

Voy a empezar a trabajar con MariaDB despues de haber trabajado siempre con tablas nativas de fox, el sistema que necesito desarrollar es para un control de piso el cual se pretende llevar un control por medio de etiquetas de código de barras, por lo que estas deberán ser impresas, por cada impresión se deberá generar un registro en una tabla para identificar en varios procesos posteriores el avance, el detalle es que al imprimir las etiquetas siempre habra algunas que no se utilicen, por lo que tendré registros sin utilizar y lo que pretendo es que despues de 1 mes cualquier etiqueta que haya sido impresa y que no registre ninguna actualización posterior, eliminarla de la tabla para que no ocupe espacio en disco, habrá otro proceso que se pretende que borre la información despues de 6 meses sin actualización, la pregunta concreta es, hay alguna función para elimine fisicamente dichos registros de la tabla?

Salu2!!

SISTEMAS VFPSTEAM

unread,
May 4, 2017, 12:03:26 PM5/4/17
to Comunidad de Visual Foxpro en Español
Hola

Puedes usar DELETE FROM tutabla WHERE tufiltro
Recuerda que en tufiltro debes colocar la referencia para ser tomada en la eliminación , puede ser intervalos de fechas, campos en blanco etc.

Saludos
VFPSTEAM BI SOLUTIONS

Antonio Meza

unread,
May 4, 2017, 12:04:50 PM5/4/17
to Comunidad de Visual Foxpro en Español
Hola te recomiendo leas el siguiente post, te anticipo que no vas a obtener lo que quieres pero es bueno conocer los puntos de vista sobre el tema de borrar datos en una base de datos.


Nota: NUNCA eh necesitado eliminar físicamente archivos por eso FoxyDb no tiene esa opción pues a demás no la conozco.

saludos
Antonio Meza


El jueves, 4 de mayo de 2017, 9:26:22 (UTC-5), acmc escribió:

Víctor Hugo Espínola Domínguez

unread,
May 4, 2017, 12:13:36 PM5/4/17
to publice...@googlegroups.com
No sé si existe esa opción en Mysql/Mariadb, en Postgresql sí existe, el comando es VACUUM.

Si estás a tiempo de cambiar de motor, Postgresql es mejor y es totalmente gratis.

Saludos,
Víctor.
Lambaré - Paraguay.

mapner

unread,
May 4, 2017, 12:22:53 PM5/4/17
to Comunidad de Visual Foxpro en Español
En bases de datos, al borrar, no necesariamente ahorras espacio salvo que tengan mecanismos de garbage collection sobre páginas desvinculadas. En mi caso uso Firebird y si en una tabla se borran gran cantidad de regiatros, más allá de la función swapping del motor, cada tanto conviene hacer un backup/restore.

Angel Perez

unread,
May 4, 2017, 1:13:57 PM5/4/17
to publice...@googlegroups.com
Gracias a todos por sus comentarios:

Victor, he leido muchas cosas buenas de postgresql pero considero que para los pequeños proyectos que voy a trabajar no requiero de tanto, ademas de que pienso trabajar con la herramienta de Antonio FoxyDB y la parte de Postgresql no la tiene terminada :(  tu que utilizas para accesar postgresql desde fox??

Antonio, muy bueno conocer los diferentes puntos de vista sobre el post que pusiste, en mi caso no aplica las cuestiones de relación con otras tablas por lo que no perdería integridad en la información, de hecho lo que pretendo es borrar registros que se quedaron huerfanos y por eso hice mención sobre que trabajaba con tablas nativas de Fox, porque ahí si puedes hacer borrado fisico y si te ahorras espacio en disco.

Luis, gracias por tu comentario pero el DELETE no es lo que estoy buscando

Mapner, tal vez sea cierto el comentario de que no ahorres espacio, pero lo que si es seguro es que las consultas tardarían menos al tener menor cantidad de registros no?, por cierto que tal te va con firebird? parece ser una buena alternativa

Salu2!!

Víctor Hugo Espínola Domínguez

unread,
May 4, 2017, 1:36:18 PM5/4/17
to publice...@googlegroups.com
>Victor, he leido muchas cosas buenas de postgresql pero considero que para los pequeños proyectos que voy a trabajar no requiero de >tanto, ademas de que pienso trabajar con la herramienta de Antonio FoxyDB y la parte de Postgresql no la tiene terminada :(  tu que utilizas >para accesar postgresql desde fox??

Uso una clase genérica de cursor adapter, adaptación de una creada por Cetin Basoz y una clase de capa de datos genérica que me sirve para cualquier sistema y cualquier motor de base de datos, incluyendo a DBC de VFP.  Esta técnica tiene un costo: No se aprovecha totalmente la potencia de los SGBD al no usar procedientos almacenados, pero con la ventaja de que con mínimos cambios se puede utilizar cualquier motor y desarrollar usando tablas nativas.

Puedes bajar un ejemplo simplificado desde http://www.mediafire.com/file/hbmr0r5u7z5ysur/EjemploABM3Kpas.rar

Saludos,
Víctor.
Lambaré - Paraguay.


mapner

unread,
May 4, 2017, 1:46:03 PM5/4/17
to Comunidad de Visual Foxpro en Español
De acuerdo al diseño de cada motor de BD, los deleteados pueden o no afectar el perfomance de consultas. 
Firebird es muy buena alternativa de SGBD C/S. Lo uso hace varios años con VFP y es de muy sencilla instalación e administración, pero hoy en día Firebird, PostgreSQL y MariaDB son buen buenos los tres.

Angel Perez

unread,
May 4, 2017, 2:06:21 PM5/4/17
to publice...@googlegroups.com
Gracias Mapner por el comentario!

Victor, le daré un vistazo al ejemplo y gracias por el aporte!!

Por cierto, la idea es interactuar con un sistema ya desarrollado con tablas nativas de fox y alimentar desde ahí al nuevo sistema desarrollado con PHP y el SGBD que me decida a utilizar, alguien ha hecho desarrollos con PHP??

Salu2!!

mapner

unread,
May 4, 2017, 2:55:01 PM5/4/17
to Comunidad de Visual Foxpro en Español
Tengo desarrollados sistemas duales, o sea la misma BD Firebird son accedidos por módulos VFP (Desktop Windows) y por módulos PHP (WEB).
En general la parte Desktop es para trabajo interno de la empresa y la parte WEB es para uso de terceros externos. 

Carlos Miguel FARIAS

unread,
May 4, 2017, 4:18:42 PM5/4/17
to Grupo Fox
En ningún SGBD (al menos los más conocidos) existe el concepto de PACK de tablas que se existe en los DBF.
En los DBF, el pack toma la tabla (lo hace por tabla) y la copia a otro archivo, omitiendo aquellos registros que fueron "marcados" como borrados por el comando DELETE de xBase, marca que se puede quitar con el comando RECALL.
Luego de la copia, borra la tabla original y renombra la copia nueva con el nombre de la original. En estos casos conviene efectuar un reindex de todos los indices (es simple si se usa un indice  estructural <nombre_tabla.cdx>, pero si no, hay que abrir cada uno y reindexar).
En los SGBD, un DELETE "borra" el registro definitivamente (lo hace inaccesible, no se puede recuperar, salvo restaurar por backup "caliente"), los indices se reindexan automáticamente.
Hay que tener en cuenta que en SGBD como postgresql, los registros son de longitud variable y el sistema, para mejor desempeño, al borrar o modificar un registro, el área del borrado queda marcada como disponible, lo mismo pasa con el caso de modificaciones donde en el espacio original no entra el registro modificado (lo agrega en un área libre y marca la original como disponible).
Luego, en postgresql, se ejecuta un VACUUM que recupera el espacio marcado al área libre (hace como un defrag del espacio de disco asignado a la BD).
Por supuesto, por más SGBD sofisticado que tengas, las copias de seguridad deben seguir haciéndose.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe, no caigan en el lado oscuro por no hacer un backup

Angel Perez

unread,
May 4, 2017, 4:26:59 PM5/4/17
to publice...@googlegroups.com
Gracias Miguel por la aclaración, ahora se entiende porque no hay un comando equivalente a pack en un SGBD

Mapner, has impreso etiquetas desde PHP en una impresora de etiquetas?? 

Salu2

Marcos Godoy

unread,
May 6, 2017, 11:41:18 AM5/6/17
to publice...@googlegroups.com
En MariaDB o Mysql (HERMANAS)  el procedimiento es "alter table xxxxxxxxxx", donde xxxxxxxxxxxx es el nombre de la tabla .
Cuando haces esto y no tiene mas parametros que el nombre de la tabla lo que hace esto es lo que en fox seria un pack. ..., de todas maneras los registros borrados ya eran inaccecibles


Angel Perez

unread,
May 6, 2017, 11:58:08 AM5/6/17
to publice...@googlegroups.com
Que tal Marcos, busque en google para ratificar lo que me dices y no encuentro nada al respecto, tu de donde sacaste dicha información?

Salu2

VFPSTEAM BI SOLUTIONS

unread,
May 6, 2017, 12:19:18 PM5/6/17
to publice...@googlegroups.com
Hola 

Alter table se usa para agregar una columna modificar una columna o alterar un índice. No para borrar registros.

En MySQL o Mariadb no existe un comando pack lo q tienes q realizar es usar un comando DELETE ya que es un motor de base de datos ahora sí lo que deseas es limpiar toda la tabla usa el comando TRUNCATE

Saludos   

Carlos Miguel FARIAS

unread,
May 7, 2017, 10:35:41 AM5/7/17
to Grupo Fox
Ojo!, el Truncate es equivalente a un ZAP.
El Alter table no es para "limpiar" o comprimir la tabla, es para modificarla (alterarla) y si es cierto que como efecto colateral, cuando se modifica una tabla, el SGBD crea una copia nueva, con la nueva estructura y descarta los espacios "vacios" pero no es la finalidad específica de limpiar.
Hay que tener cuenta que no es lo mismo reorganizar el espacio físico,que algunos SGBD lo hacen en "caliente" contra un Alter Table que requiere un bloqueo completo de la tabla.
Lo que siempre hay que tener cuidado con esos comandos machaca todo.
Si la tabla tiene indices autoincrementales como PK, hay que asegurarse que se eliminen todas las referencias a los mismos, si no va a quedar una bd irracional.
Lo mismo pasaría con claves naturales, pero mientras las naturales al recargarse se restablecería la relación (natural) con los AI, restablecer las relaciones es prácticamente imposible.
Además esos comandos de borrado general, si no está instrumentada bien la integridad referencial (o no se tiene en cuenta), puede producir tremendas inconsistencias de datos.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe
Reply all
Reply to author
Forward
0 new messages