Problema mysqldump di una vista

di il
4 risposte

Problema mysqldump di una vista

Buongiorno a tutti,

in un db mysql c'è una tabella in cui vengono salvate le registrazioni di nuovi contratti.
I campi principali di questa tabella sono: id, id_contratto, data_inizio

Ho creato una vista che estrae da una tabella una riga per contratto con la data più recente e il codice utilizzato è il seguente:

SELECT 
   contratti.id_contratto,
   contratti.data_inizio
   ...
FROM
   ( SELECT 
        contratti.id_contratto,
        MAX(contratti.data_inizio) AS data_max
     FROM
        contratti
     GROUP BY
        contratti.id_contratto
   ) as filtro
INNER JOIN
   contratti
ON
   contratti.id_contratto = filtro.id_contratto AND
   contratti.data_inizio = filtro.data_max
La vista funziona correttamente, il problema si presenta quando viene eseguito il backup notturno tramite mysqldump.
L'errore che ottengo è:
mysqldump: Got error: 1356: "View 'db_name.vista_ultimi_contratti' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them" when using LOCK TABLES
Dopo varie prove credo che il problema sia dovuto al fatto che nella vista viene utilizzata due volte la tabella contratti, che viene loccata alla prima chiamata e quindi nella seconda genera errore.

Una soluzione che mi è venuta in mente è di dividere la vista in 2, cosi una vista estrae i contratti più recenti e la seconda li confronta con tutta la tabella contratti per estrarre le altre informazioni.
Questa soluzione però non mi piace molto e volevo quindi chiedervi qualche suggerimento in merito.

Grazie!

4 Risposte

  • Re: Problema mysqldump di una vista

    Non so se l'origine del problema sia imputabile all'utilizzo dell'inner join sulla stessa tabella comunque
    qui https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html trovi
    4 metodi per ottenere quanto chiedi ... io proverei l'ultimo (rank), ovviamente se supportato dalla tua versione di MySQL.
  • Re: Problema mysqldump di una vista

    Personalmente , fosse anche solo per curiosità, proverei a cancellarla e ricrearla uguale ;

    EDIT
    spinto da curiosità , in rete ho trovato anche un 'porkaround' che non so se funzioni o meno

    https://boyter.org/2010/10/mysql-error-error1356-view-references-invalid/
  • Re: Problema mysqldump di una vista

    sspintux ha scritto:


    Personalmente , fosse anche solo per curiosità, proverei a cancellarla e ricrearla uguale ;

    EDIT
    spinto da curiosità , in rete ho trovato anche un 'porkaround' che non so se funzioni o meno

    https://boyter.org/2010/10/mysql-error-error1356-view-references-invalid/
    Perdonate il ritardo nella risposta.

    Ho creato un nuovo DB in cui ho creato solo una tabella di prova con stessi cambi di quella esistente sul db originale.
    Ho poi creato una sola vista con lo stesso codice di quella originale.
    Ho infine configurato un backup automatico e l'erroer compariva identico.

    Deduco quindi che non è la vista creata male o altro, anche perchè nell'esecuzione gira perfettamente.

    Il link che hai copiato l'avevo già visto, infatti alla prima comparsa del problema, visto che i backup non avvenivano completamente e che tanto il blocco era su una vista e non su una tabella, ho inserito nella riga di comando del backup la chiave -force.
    Questo permette l'esecuzione corretta del backup ( avevo fatto un caricamente per prova ed era tutto ok ), solo che mi arrivano comunque un sacco di mail di avviso di errore perchè è comunque una forzatura.
  • Re: Problema mysqldump di una vista

    max.riservo ha scritto:


    Non so se l'origine del problema sia imputabile all'utilizzo dell'inner join sulla stessa tabella comunque
    qui https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html trovi
    4 metodi per ottenere quanto chiedi ... io proverei l'ultimo (rank), ovviamente se supportato dalla tua versione di MySQL.
    Ho quardato i metodi proposti e infatti tra essi c'è quello che uso attualmente ma che da errore.

    Ho provato quindi a riscrivere la vista utilizzando il Rank.
    Direi che nell'esecuzione funziona bene sia localmente che su web.

    Su web quando scrivo la query mi segnala un errore sulla parola chiave "WITH" ma poi la esegue comunque.
    Ho quindi creato la vista in un db di prova e viene eseguita correttamente e pure il backup viene eseguito senza problemi.

    Direi che quindi questa potrebbe essere la soluzione migliore.

    Grazie molte per la dritta!
Devi accedere o registrarti per scrivere nel forum
4 risposte