MariaDB: Come creare un Buco Nero se BLACKHOLE è disattivato

English version

Lo Storage Engine BLACKHOLE fa in modo che i dati cadano in un buco nero. Non solo i nuovi dati che si tenta di inserire, ma anche quelli già esistenti. In altre parole, BLACKHOLE disabilita una tabella e ne cancella il contenuto. Può essere utile per il debug (non esegue una query, ma c’è un errore viene segnalato) o altri scopi particolari.

Tuttavia, i fornitori di hosting di solito disabilitano BLACKHOLE. Non chiedetemi in che modo questo semplicissimo Storage Engine possa danneggiare il loro servizio; sta di fatto che generalmente non è possibile usarlo.

Ma allora, come si può emulare una tabella BLACKHOLE? La risposta è semplice: basta usare una vista!

Prima di tutto, ci serve una tabella. Il procedimento è banale e privo di rischi, perciò evito di scrivere una a CREATE TABLE. Usa una tabella già esistente. L’esempio seguente presuppone che questa si chiami `t_user` – ma chiamala come ti pare.

Poi, bisogna creare una vista. Ne useremo una del tipo più semplice, che rispecchia il contenuto della tabella. E’ possibile leggere e scrivere i dati. Ecco il codice:

CREATE OR REPLACE VIEW `t_user`
	AS SELECT * FROM `user`;

Da ora in poi useremo `t_user` invece di `user` per tutte le nostre operazioni. Ma a un certo punto, vogliamo disabilitarla – cioè trasformarla in un Buco Nero!

Come ho detto, il procedimento è banale. Si ridefinisce `user`, ma con 2 modifiche:
* Aggiungiamo una clausola WHERE FALSE. Ovviamente la vista non conterrà dati (perché non è possibile che una riga soddisfi WHERE FALSE).
* Aggiungiamo una clausola WITH CHECK OPTION. La vista non sarà scrivibile (perché una riga potrà essere inserita solo se soddisfa WHERE FALSE, il che è appunto impossibile).

Ecco il codicee:

CREATE OR REPLACE VIEW `t_user`
	AS SELECT * FROM `user` WHERE FALSE
	WITH CHECK OPTION;

Quando vogliamo trasformare di nuovo il Buco Nero in un pianeta abitabile, torniamo a eseguire la prima istruzione.

La clausola OR REPLACE è utile in questo caso, perché non siamo costretti a eseguire DROP VIEW e poi di nuovo CREATE VIEW – è sufficiente un’unica operazione atomica.

A presto!

2 pensieri su “MariaDB: Come creare un Buco Nero se BLACKHOLE è disattivato

  1. ciao, si può usare questa tecnica per la replica?
    ho due tabelle non collegate e vorrei replicarne una sullo slave1 e l’altra sullo slave2

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...