2013-04-02 16 views
7

Moja baza danych Mongo ma kilka indeksów z niestandardową nazwą, ponieważ zawiera zbyt wiele pól, aby automatycznie wygenerować nazwę, bez błędu "ns name too long".Mongorestore: ns nazwa zbyt długa, maksymalny rozmiar to 128

Kiedy próbuję przywrócić tę bazę danych z kopii zapasowej za pomocą magazynu mongorest - kończy się to błędem ("nazwa ns za długa, maksymalny rozmiar to 128"). Wygląda na to, że mongorestore próbuje generować nazwy indeksów na podstawie ich zawartości, zamiast tylko przywracać nazwę faktycznie użytą w bazie danych.

Jedyne rozwiązanie, jakie do tej pory wymyśliłem, to skorzystanie z mongorestore z --noIndexRestore i odtworzenie wszystkich indeksów ręcznie, ale jest to zdecydowanie straszna droga. Czy istnieje lepszy sposób na rozwiązanie tego problemu?

Mam problem z MongoDB 2.4.1.

Dzięki.

+0

Czy rozważałeś zgłoszenie biletu na ten problem w MongoDB Bugtracker? Z opisu w dokumentacji (http://docs.mongodb.org/manual/reference/mongorestore/) uznałbym to za błąd. Jeśli utworzyłeś zrzut z mongodump, spodziewałbym się, że sklep będzie mógł przywrócić dokładny stan ponownie. – philnate

+0

Zrobię, dziękuję! – freetonik

+2

Sporządzono https://jira.mongodb.org/browse/SERVER-9404 – freetonik

Odpowiedz

1

używa tych samych nazw podczas odtwarzania indeksu, który istniał podczas zrzutu. Możesz zobaczyć, jakie nazwy znajdowały się w pliku .metadata.json w wersji 2.2 i późniejszych, przed 2.2 nazwy znajdowały się w pliku .system.indexes.bson (jest w BSON, dzięki czemu możesz go przejrzeć za pomocą komendy bsondump).

Jednym ze sposobów, w jaki udało mi się uzyskać ten błąd, jest przywrócenie bazy danych lub kolekcji o innej nazwie, a nowa nazwa jest dłuższa niż oryginalna. Jeśli użyjesz oryginalnej nazwy bazy danych i nazw kolekcji, zostanie użyta oryginalna nazwa indeksu (niestandardowa lub domyślna), a następnie będzie to nazwa prawna.

Powiązane problemy