gph
gph

Reputation: 1360

Dropped and Recreated ArangoDB Databases Retain Collections

A deployment script creates and configures databases, collections, etc. The script includes code to drop databases before beginning so testing them can proceed normally. After dropping the database and re-adding it:

var graphmodule = require("org/arangodb/general-graph");
var graphList = graphmodule._list();
var dbList = db._listDatabases();

for (var j = 0; j < dbList.length; j++) {
   if (dbList[j] == 'myapp')
       db._dropDatabase('myapp');
}

db._createDatabase('myapp');
db._useDatabase('myapp');

db._create('appcoll'); // Collection already exists error occurs here

The collections that had previously been added to mydb remain in mydb, but they are empty. This isn't exactly a problem for my particular use case since the collections are empty and I had planned to rebuild them anyway, but I'd prefer to have a clean slate for testing and this behavior seems odd.

I've tried closing the shell and restarting the database between the drop and the add, but that didn't resolve the issue.

Is there a way to cleanly remove and re-add a database?

Upvotes: 2

Views: 259

Answers (2)

dothebart
dothebart

Reputation: 6067

ArangoDB stores additional information for managed graphs;

Therefore when working with named graphs, you should use the graph management functions to delete graphs to make shure nothing remains in the system:

var graph_module = require("org/arangodb/general-graph");
graph_module._drop("social", true);

The current implementation of the graph viewer in the management interface stores your view preferences (like the the attribute that should become the label of a graph) in your browsers local storage, so thats out of the reach of these functions.

Upvotes: 0

stj
stj

Reputation: 9097

The collections should be dropped when db._dropDatabase() is called. However, if you run db._dropDatabase('mydb'); directly followed by db._createDatabase('mydb'); and then retrieve the list of collections via db._collections(), this will show the collections from the current database (which is likely the _system database if you were able to run the commands)?.

That means you are probably looking at the collections in the _system database all the time unless you change the database via db._useDatabase(name);. Does this explain it?

Upvotes: 1

Related Questions