Actualización fallida: UniqueViolation: valor de clave duplicado viola la restricción única "data_explorer_queries_pkey"

La actualización de hoy a la última versión falló:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' falló con el retorno #<Process::Status: pid 3194 exit 1>
Ubicación del fallo: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falló con los parámetros {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
590cf0611c566ea6df5f70ffdd2cec2359e84eaea29b7abcde77d56288a46370
** FALLO AL INICIALIZAR ** por favor, desplázate hacia arriba y busca mensajes de error anteriores; puede haber más de uno.

Arriba en el registro:

Causado por:
PG::UniqueViolation: ERROR: el valor de clave duplicado viola la restricción única "data_explorer_queries_pkey"
DETALLE: La clave (id)=(-10) ya existe.

y

rake aborted!
StandardError: Ha ocurrido un error; esta y todas las migraciones posteriores se cancelaron:

ERROR: el valor de clave duplicado viola la restricción única "data_explorer_queries_pkey"
DETALLE: La clave (id)=(-10) ya existe.

Así que, supongo que necesito eliminar la clave duplicada data_explorer_queries_pkey.

¿Cómo lo hago?

1 me gusta
3 Me gusta

Gracias, pero no puedo acceder a la aplicación:

./launcher enter app
Respuesta de error del daemon: El contenedor 694b24a2a235e90456fb0ca770c86ac14bb914ad33ada8a18fc4777a1188d848 no está en ejecución
root@gaoa-discourse:/var/discourse#

Y también:

root@gaoa-discourse:/var/discourse# su - postgres
No hay entrada de contraseña para el usuario 'postgres'
1 me gusta

¿Entonces reinicias el contenedor?

./launcher start app

Luego, quieres algo como:

./launcher enter app

y luego:

su postgres -c 'psql discourse'

4 Me gusta

¡Gracias! No estoy seguro de por qué no se inició la primera vez que lo intenté.

Parece que tengo un ID duplicado de “-10”:

4374 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"group_ids":[],"last_run_at":"2019-10-21T04:03:35.548+00:00"}

4114 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"last_run_at":"2019-02-27T06:17:48.317+00:00"}

Así que supongo que debería ejecutar esto:

DELETE from plugin_store_rows WHERE id = 10

o debería ser:

DELETE from plugin_store_rows WHERE id = -10

Tengo curiosidad: ¿cuál de los dos se eliminará con el comando anterior, el primero que encuentre o ambos?

1 me gusta

Los números en la columna ID son 4374 y 4114. Elimina el de número más alto.

¡NO ejecutes DELETE from plugin_store_rows WHERE id = 10!! o eliminarás la entrada incorrecta!

3 Me gusta

Ah, ¿esto?

DELETE from plugin_store_rows WHERE id = 4374;

1 me gusta

Sí. ¿No deberías ver el encabezado de columna correcto en la salida de la consulta PL/SQL?

1 me gusta

Ahora que lo mencionas, sí. Deslicé hacia abajo porque la salida es así:

2 Me gusta

Sí, también, en general, considera ejecutar los comandos para ver su impacto antes de confirmar, consulta:

Luego, si descubres que has eliminado 500 filas cuando solo querías afectar a una, tienes la oportunidad de deshacer sin miedo.

3 Me gusta

¡Éxito! :tada: Gracias por la orientación @merefield.

Mi comando DELETE le faltaba un punto y coma de cierre (actualizado arriba).

3 Me gusta

¡Ah, sí! Eso siempre me pasa a mí también :wink:

3 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.