A database can be upgraded from a minor version to the next, e.g. 1.1 → 1.2, and 1.2 → 1.3, but you can not jump directly from 1.1 → 1.3. For version 1.8 in particular, it is possible to upgrade directly from version 1.5.3 and later, as an explicit upgrade. The upgrade process is a one way step; databases cannot be downgraded.
For most upgrades, only small changes are required to the database store, and these changes proceed automatically when you start up the database using the newer version of Neo4j.
However, some upgrades require more significant changes to the database store. In these cases, Neo4j will refuse to start without explicit configuration to allow the upgrade.
The table below lists recent Neo4j versions, and the type of upgrade required.
Upgrade process for Neo4j version
From Version | To Version | Upgrade Type |
---|---|---|
1.3 | 1.4 | Automatic |
1.4 | 1.5 | Explicit |
1.5 | 1.6 | Explicit |
1.6 | 1.7 | Automatic |
1.7 | 1.8 | Automatic |
1.8 | 1.9 | Automatic |
1.9 | 2.0 | Explicit |
![]() | Note |
---|---|
Downgrade is supported only between versions which do not have incompatible store layouts.
That means that if you did an upgrade where you didn’t have to explicitly set the |
To perform a normal upgrade (for minor changes to the database store):
To perform a special upgrade (for significant changes to the database store):
allow_store_upgrade=true
in your neo4j.properties or embedded configuration.
allow_store_upgrade
configuration parameter should be removed, set to false
or commented out.
This edition adds a new store for labels and one for schema, an index for labels, and also the format of the node store has changed. Note that we do not currently support rolling upgrades between 1.9.x and 2.0.
For Neo4j 2.0, Java 7 is required. We recommend that you install the Java JDK 7 from the Oracle Website.
When upgrading, the following will happen and will both take some time, and will require extra disk space:
Unless you set the statements to still use Cypher 1.9, they have to be updated for the following changes:
a-->b
you should use something like (a:Person)-->(b:Company)
.
It’s good practice to use parentheses in node patterns even where they are not strictly required, to enhance readability.
(a)-[?]->(x)
for optional relationships has been removed.
Use OPTIONAL MATCH
instead (see the corresponding chapter in the Neo4j Manual).
!
and ?
property operators
node.property = "value"
will not fail when a node without the property is encountered, and will instead return NULL
.
This is the same behavior as node.property! = "value"
in Cypher 1.9.
The !
property operator has been removed in 2.0.
Support for expressions using the ?
property operator, such as node.property? = "value"
, have also been removed.
You can use not(has(node.property)) OR node.property = "value"
instead, which is compatible with both 1.9 and 2.0.
CREATE
syntax
CREATE a={foo:’bar’}
syntax has been removed.
Instead, use CREATE (a {foo:’bar’})
.
DELETE
to remove properties
DELETE a.prop
syntax has been removed.
Instead, use REMOVE a.prop
.
START
clauses using indexes (for example START n=node:index({key}='value')
).
Use the literal key names instead.
MATCH ({node})-->(other))
).
Note that this form was only possible when mixing the embedded Java API and Cypher, and thus does not affect users of Neo4j Server.
FOREACH
, EXTRACT
, etc
|
instead of a :
to separate the components of the statement.
For example, EXTRACT(n in ns : n.prop)
is replaced with EXTRACT(n in ns | n.prop)
.
The iterating functions include FOREACH
, EXTRACT
, REDUCE
, ANY
, ALL
, SINGLE
and NONE
.
WITH
syntax
WITH
syntax, === <identifiers> ===
, has been removed.
Use the WITH
keyword instead.
MATCH (ref:MyReference) RETURN ref
.
Simply use one label per such starting point you want to use.
Note that this should be executed once during application initialization, to ensure that only a single reference node is created per label.
When migrating a database with an existing reference node, add a label to it during migration, and then use it as per the previous pattern.
This is how to add the label: START ref=node(0) SET ref:MyReference
.
In case you have altered the database so a different node is the reference node, substitute the node id in the statement.
There are no store format changes between these versions so upgrading standalone instances simply consists of starting the database with the newer version. In the case of High Availability (HA) installations, the communication protocol and the master election algorithm have changed and a new "rolling upgrade" feature has been added, removing the need to shut down the entire cluster. For more information, refer to the "Upgrading a Neo4j HA Cluster" chapter of the HA section of the Neo4j manual.
There are no store format changes between these versions so upgrading standalone instances simply consists of starting the database with the newer version. In the case of High Availability (HA) installations, the communication protocol and the master election algorithm have changed and a new "rolling upgrade" feature has been added, removing the need to shut down the entire cluster. For more information, refer to the "Upgrading a Neo4j HA Cluster" chapter of the HA section of the Neo4j manual.
There are no store format changes between these versions, which means there is no particular procedure you need to upgrade a single instance.
In an HA environment these steps need to be performed:
This upgrade changes lucene version from 3.1 to 3.5. The upgrade itself is done by Lucene by loading an index.
In an HA environment these steps need to be performed:
This upgrade includes a significant change to the layout of property store files, which reduces their size on disk, and improves IO performance. To achieve this layout change, the upgrade process takes some time to process the whole of the existing database. You should budget for several minutes per gigabyte of data as part of your upgrade planning.
![]() | Warning |
---|---|
The upgrade process for this upgrade temporarily requires additional disk space, for the period while the upgrade is in progress. Before starting the upgrade to Neo4j 1.5, you should ensure that the machine performing the upgrade has free space equal to the current size of of the database on disk. You can find the current space occupied by the database by inspecting the store file directory (data/graph.db is the default location in Neo4j server). Once the upgrade is complete, this additional space is no longer required. |
Here's where to ask to get the best answers to your Neo4j questions:
Copyright © 2013 Neo Technology