Hallo!
Heute habe ich versucht, meine Discourse-Instanz von „2.1.0.beta6
Hallo!
Heute habe ich versucht, meine Discourse-Instanz von „2.1.0.beta6
Okay, ich wollte den Datenbankinhalt untersuchen, also habe ich Folgendes getan:
cd /var/discourse
./launcher start synfig-forums
./launcher enter synfig-forums
su - postgres
psql
Dabei trat ein Fehler auf:
psql: konnte keine Verbindung zum Server herstellen: Datei oder Verzeichnis nicht gefunden
Ist der Server lokal aktiv und akzeptiert
Verbindungen über den Unix-Domain-Socket "/var/run/postgresql/.s.PGSQL.5432"?
Sie haben einen beschädigten Index. Weitere Hinweise finden Sie unter Can't restore due to corrupt indexes (with some clues on how to deal with corrupt indexes).
Verwenden Sie einen separaten Datenbank-Container? Meine Vermutung ist, dass Sie dies tun und stattdessen diesen Container betreten müssen.
Danke für die Hinweise!
Nein, ich habe eine eigenständige Container-Installation (ich glaube, so nennt man das).
Ich habe versucht, den PostgreSQL-Dienst (aus dem Docker-Container) zu starten und erhielt folgende Meldung:
root@cloud-synfig-forums:/var/www/discourse# service postgresql start
* Starting PostgreSQL 10 database server * Error: Config owner (postgres:107) and data owner (syslog:106) do not match, and config owner is not root
[fail]
Okay, ich habe es geschafft, den PostgreSQL-Dienst zu starten, eine Datenbank-Sicherung durchgeführt und mich in der Datenbank angemeldet:
# chown -R postgres /shared/postgres_data
# service postgresql start
* Starting PostgreSQL 10 database server [ OK ]
# psql
psql: FATAL: role "root" does not exist
# su - discourse
$ pg_dump -xOf ~/discourse-backup.sql -d discourse -n public
$ exit
# mv /home/discourse/discourse-backup.sql /shared/discourse-backup-20200227-1.sql
# su - postgres
$ psql discourse
psql (10.4 (Ubuntu 10.4-2.pgdg16.04+1))
Type "help" for help.
discourse=#
Was kann ich jetzt tun, um meine Installation wiederherzustellen?
Das klingt nicht gut.
Hat es bei der Neuinstallation etwas über ein Upgrade von PostgreSQL gesagt? Hast du es mehr als einmal ausgeführt?
Hast du ein aktuelles Backup? Es wäre vielleicht am einfachsten, von diesem wiederherzustellen, aber auch das wird schwierig sein.
Ich erinnere mich nicht mehr. Es gab zu viele Nachrichten, als ich über die Weboberfläche aktualisiert habe. ![]()
Und ja, ich habe das Update mehr als einmal ausgeführt: das erste Mal über die Weboberfläche (es ist fehlgeschlagen), dann mehrmals über die Konsole.
Ja, ich habe ein Backup von vor 24 Stunden. Ich kann es wiederherstellen, aber einige Nachrichten gehen verloren (die, die nach dem Backup gepostet wurden).
Das ist kein beschädigter Index.
Zwischen den Versionen 2.1 und 2.5 haben wir Pools von PluginStore in richtige Tabellen verschoben. Einer der Gründe für diese Verschiebung ist die Gewährleistung der Datenkonsistenz, was genau das Problem ist, das Sie haben.
Sie haben einen doppelten Eintrag in der Tabelle poll_options. Können Sie dort hingehen und die doppelten Einträge löschen?
Vielen Dank für die Klärung!
Ich bin kein Experte für PostgreSQL… kannst du mir bitte bei den erforderlichen Befehlen helfen? (Unter der Annahme, dass ich bereits psql ausgeführt habe.) ![]()
Okay, ich habe Folgendes ausgeführt:
discourse=# SELECT * FROM poll_options;
id | poll_id | digest | html | anonymous_votes | created_at | updated_at
----+---------+--------+------+-----------------+------------+------------
(0 rows)
Wie kann es sein, dass diese Tabelle leer ist?
Andere Tabellen sind nicht leer:
discourse=# SELECT name FROM badges WHERE id = 13;
name
------------
First Flag
(1 row)
Ich vermute, der doppelte Eintrag stammt aus dem Plugin Store. Wo befindet er sich und wie kann ich ihn anzeigen/bearbeiten?
Es ist einfach eine weitere Tabelle (plugin_store_rows).
Es scheint, dass die Umfragestimmen tatsächlich in der Tabelle post_custom_fields liegen, wobei die Spalte name den Wert ‘polls’ hat.
Dies wurde durch diesen Commit geändert, und die entsprechende Migration füllt die Tabelle poll_options. Möglicherweise wird also versucht, einen doppelten Datensatz einzufügen.
Also, ich sehe zwei Möglichkeiten für mich:
migrate_polls_data.rb so ändern, dass das Einfügen von doppelten Einträgen übersprungen wird. Das wäre die bessere Lösung, aber ich weiß nicht, wie ich das bewerkstelligen soll.Wie kann ich den Code so anpassen, dass dieser Teil stillschweigend fehlschlägt?
Okay, ich denke, es reicht, die SQL-Anweisung zu ändern, indem ON CONFLICT DO NOTHING hinzugefügt wird – https://stackoverflow.com/a/31742830
Würde das funktionieren?
Okay, ich habe Folgendes aus pgsql ausgeführt:
SELECT *
FROM post_custom_fields
WHERE name = 'polls'
AND value LIKE '%399fc6670871474cd7ce0458401fd299%';
Es wurde eine Zeile angezeigt. Also habe ich sie entfernt:
DELETE FROM post_custom_fields
WHERE name = 'polls'
AND value LIKE '%399fc6670871474cd7ce0458401fd299%';
Hinweis: Der korrekte Weg wäre das Löschen nach Zeilen-ID gewesen, aber da nur eine einzige Zeile zurückgegeben wurde, habe ich es so gemacht. ![]()
Danach habe ich das Upgrade neu gestartet, und es wurde erfolgreich abgeschlossen. Danke an alle, die ihre Hinweise gepostet haben! ![]()