¿Cómo puedo eliminar una etiqueta en la base de datos de desarrollo (en local)?

Continuando la discusión de Restauración manual de una copia de seguridad de Discourse para desarrollo:

En mi máquina local, quiero eliminar una etiqueta de la base de datos de la copia de seguridad antes de restaurar. ¿Cómo puedo hacerlo desde la consola?

Para eliminar una etiqueta desde la consola de Rails, intenta:

t = Tag.find_by_name('<nombre_de_tu_etiqueta>')
t.destroy!

Llamar a destroy! en lugar de delete en el último comando limpiará todos los registros del sitio que estén asociados con la etiqueta eliminada.

Gracias por tu ayuda :blush:

¿Es posible eliminar una etiqueta de una base de datos que aún no se ha ejecutado? Es decir, de una copia de seguridad que no se puede restaurar (debido al problema de la etiqueta duplicada).

Espero que la pregunta sea clara.

Si yo mismo estuviera haciendo esto, comenzaría volviendo al sitio donde se creó el archivo de copia de seguridad, eliminando la etiqueta a través de la consola de Rails y luego creando un nuevo archivo de copia de seguridad.

Si eso no es posible o si no resuelve el problema de las etiquetas duplicadas, podrías eliminar la fila de la tabla abriendo una terminal psql en ella. Algo como:

DELETE FROM tags WHERE name = <nombre_de_tu_etiqueta>;

Mi preocupación al respecto es que esto no eliminará los usos de la etiqueta eliminada de la base de datos del sitio de la misma manera en que se hace si utilizas el comando destroy! de Rails. Podría ser una buena idea probar esto en una copia del archivo de respaldo para asegurarte de que no rompa nada.

También podría ser una buena idea ejecutar una declaración SELECT antes de eliminar la etiqueta. Eso podría mostrar la causa del problema:

SELECT FROM tags WHERE name = <nombre_de_tu_etiqueta>;