Wyczyszczenie bazy danych

Odpowiedz Nowy wątek
2016-01-13 15:04
0

Mam problem, z którym nie bardzo mam pomysł jak sobie poradzić w sposób "ludzki". Po 1 mam strasznie zabagniona strukturę bazę danych, w której mogę grzebać i fixować na bieżąco ale nie mam czasu na zaoranie tego i przepisanie od nowa. Zresztą przeprojektowanie tego spowodowałoby straszliwy sajgon w aplikacji.

Chce aby wyczyścić wszystkie dane z tabel w bazie danych. Dostałem "pomysł" aby tabela po tabeli pobierać wszystkie rekordy i potem iterując po liście wynikowej robić remove każdego elementu osobno.
Mimo. że tabel jest około 15 a wpisów w każdej od 5 do 50. to wydaję mi się to strasznie nieprofesjonalne podejście.

Sam wygooglowałem coś takiego jak truncate jednak używając tego na zasadzie:


entityManager.getTransaction().begin();
entityManager.createNativeQuery("truncate TABLE Tabela1"); 
entityManager.getTransaction().commit();

nic się nie dzieje. Nie jestem w ogóle pewny czy dla tej konkretnej bazy da się to w ten sposób zrobić.

edytowany 1x, ostatnio: artur52, 2016-01-13 15:10

Pozostało 580 znaków

2016-01-13 15:08
0

Nie możesz sprawdzić logów mysql czy nie ma jakiegoś errora? truncate zwróci błąd jeśli tabela ma relacje do innej tabeli.

Nie pomyślałeś żeby zrobić dump samej struktury, usunąć całą tabelę i wygenerować wcześniej zapisaną strukturę ?

Pozostało 580 znaków

2016-01-13 15:15
0
  1. to nie jest mysql, w konsoli aplikacji nie dzieje się zupełnie nic, tak jakby pomijało tę linię i szło dalej (sprawdzone prostym loggerem).
  2. myślałem ale jest problem. Baza danych działa jako oddzielny moduł OSGI (jest serwisem). Musiałbym zatrzymać go i przy okazji wszystkie serwisy zależne od niego. Zdropować bazę, utworzyć tabele od nowa i uruchomić pozostałe serwisy a na to nie mogę sobie pozwolić gdyż może być tak, iż aplikacja działa a potrzebne dane ma w cache, w tym czasie użytkownik czyści ją i wgrywa odpowiednie ustawienia z XML do bazy. Tak wiem, architektura projektu jest skopana ale nie mam na to wpływu...
edytowany 1x, ostatnio: artur52, 2016-01-13 15:16
Problem przerasta moją wiedzę. Mam doświadczenie tylko z MySQL, tam truncate często blokowały relacje do innych tabel. - hywak 2016-01-13 17:18
Pomysł w dobrym kierunku. Otworzyłem bazę RazorSQLem i ręcznie chciałem użyć truncate. Okazało się, że muszę wcześniej usunąć tabelę pośredniczacą a następnie dopiero wyczyścić tabele, które chciałem. Takie rozwiązanie mnie nie urządzało. Udało mi się jednak klasycznym DELETE FROM Tabela pousuwać dane przy zachowaniu odpowiedniej kolejności. - artur52 2016-01-13 17:22

Pozostało 580 znaków

2016-01-13 18:17
hywak napisał(a):

truncate zwróci błąd jeśli tabela ma relacje do innej tabeli.

Borze.
Nie relacje tylko klucze obce.

@artur52, a próbowałeś delete *?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
Interesujący pomysł, celowy błąd ortograficzny jako sposób ominięcia przykazania Nie będziesz nadużywał imienia boskiego nadaremno:P. - bogdans 2016-01-13 19:05
Po prostu wierzę w Naturę: Góry, Rzeki, Lasy, szczególnie Bory. :) - somekind 2016-01-13 20:13

Pozostało 580 znaków

2016-01-13 18:36
Pijany Samiec
0
somekind napisał(a):

Borze.
Nie relacje tylko klucze obce.

borze, przestań poprawiać na siłę
klucze obce w relacjach (relation) tworzą relacje (relationship) - synonim: związki

Oczywiście niepoprawni ignoranci będą bronić swej ignorancji zawsze i wszędzie, wręcz chwalić się nią i szczycić, niemniej jednak komunikat błędu w takim przypadku zazwyczaj literalnie mówi o foreign key constraint, nigdy o żadnym relation, więc nie ma po co tu żadnych "relacji" zmyślać. Klucze obce też żadnych związków nie tworzą, jedynie ograniczają zbiór prawidłowych wartości dla danej kolumny. - somekind 2016-01-13 18:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0