contao / contao-manager

Contao Manager
GNU Lesser General Public License v3.0
83 stars 33 forks source link

Löschungen bitte einschränken auf "tl_"-tables #746

Closed JensB74 closed 1 year ago

JensB74 commented 1 year ago

Da wir bei einem Kunden in der selben Datenbank noch Piwik installiert haben, müssen wir immer aufpassen, dass dessen Tabellen nicht gelöscht werden. Mühselig vor allem, wenn man mal eine Erweiterung löscht, weil dessen Tabellen dann von Hand gelöscht werden müssen. Könnte man bitte nur "tl_"-Tables ansprechen im Contao Manager? Vielen Dank!

ausi commented 1 year ago

Eventuell hilft folgender Beitrag weiter: https://github.com/contao/contao/issues/4160#issuecomment-1321209253

JensB74 commented 1 year ago

Danke, werde ich ausprobieren! :)

h-e-l-i-x commented 1 year ago

Vielleicht wäre es sinnvoll das im Installer als Option anwählbar zu machen und dann entspechend den Eintrag in der config.yml zu setzen. Bei mir jedenfalls hatte es so funktioniert, aber fündig bin ich erst in den Doctrine Foren geworden.

Toflar commented 1 year ago

Ich denke nicht, dass diese Arbeit sinnvolle Zeitinvestition wäre. Es sollten grundsätzlich nie mehrere Applikationen die gleiche DB teilen. Es gibt bestimmt auch Extensions, die keinen tl_ Präfix nutzen. Er ist ja eigentlich ein alter Hut. Wir sollten eher darüber nachdenken, eine eigene DB als Systemvoraussetzung zu dokumentieren.

h-e-l-i-x commented 1 year ago

Mein ursprüngliches Problem: Ich habe eine Tabelle "machines" in der selben Datenbank. Diese enthält Maschinendaten und wird extern gefüttert (Daten werden aus einer XML direkt in die DB geschrieben). Dann wird "machines" von mod_listing für eine einfache Ausgabe genutzt, für sonst nichts - die Tabelle existiert also nur für eine Ausgabe dieser Daten via Contao. Jetzt möchte der Installer bei jedem Update ein DROP machen, obwohl ich hier argumentieren könnte, dass es die Tabelle zur selben Applikation gehört.

Die Änderung des Filters kam wohl mit der 4.11er, es wurde aber nirgendswo erwähnt dass die Datenbank ab sofort für Contao exklusiv sein muss. Selbst im Installer wurde später nur der enstprechende Text so modifiziert, dass ein Hinweis auf das Tabellenprefix entfällt. Dass App-fremde Tabellen gelöscht werden findet keinerlei Erwähnung. Meines Wissens nach steht auch nichts im Contao Changelog bzgl. des Entfernens des tl_ Filters, obwohl das ja keine Kleinigkeit ist. Das ist irgendwie doof gelaufen :)

Richtig ist, dass es evtl Extensions gibt die nicht das prefix tl_ nutzen. Ich habe daher meinen Vorschlag im anderen Thread modifiziert. Ich denke die sauberste Lösung für Contao - sofern man nicht auf eine andere DB ausweichen kann oder will - ist momentan

doctrine:
    dbal:
        schema_filter: ~^(?!mytable)~

in der config.yml zu haben. Damit wird eine (oder mehrere) konkret angegebene Tabellen von der Verarbeitung durch Doctrine bzw Contao ausgeschlossen.

Übrigens: Doctrine unterstützt explizit table prefix und hat dafür in der Doku auch konkrete Beispiele ( https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/cookbook/sql-table-prefixes.html ) Es gibt sogar in der Reference Configuration den Hinweis zu prefixen im schema filter ( https://www.doctrine-project.org/projects/doctrine-bundle/en/2.7/configuration.html - ab Zeile 91 ). Doctrine schlägt also irgendwie selbst als legitimes Mittel vor, Daten die nicht angefasst werden sollen, per table prefix auszuschliessen.