Klip: Kutt like it's perfect. An easy to use self-hosted URL shortener. https://uwu.ryukyu/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.0 KiB

Migrate database from Neo4j to Postgres

As explained in issue #197, Kutt is ditching Neo4j in favor of Postgres in version 2. But what happens to old data? Well, I have created migration scripts that you can use to transfer data from your Neo4j database to your new Postgres database.

🚧 IMPORTANT: v2 is still in beta (but somehow more stable than v1)

General recommendations

  • Importing Neo4j data into local Neo4j database and migrate from there would speed things up.
  • Use local Postgres database (where app lives), because using a remote database server will be way slower. If you're doing this locally, you can import data from local database to the remote one after migration has finished. I used this command to move data:

1. Set up a Postgres database

Set up a Postgres database, either on your own server or using a SaaS service.

2. Pull and run Kutt's new version

Right now version 2 is in beta. Therefore, pull from develop branch and create and fill the .env file based on .example.env.

NOTE: Run the app at least once and let it create and initialize tables in the database. You just need to do npm run dev and wait for it to create tables. Then check your database to make sure tables have been created. (If your production database is separate, you need to initialize it too).

3. Migrate data using scripts

First, do npm run build to build the files. Now if you check production-server/migration folder you will fine 4 files. You can now run these scripts one by one.

NOTE: that the order of running the scripts is important.

NOTE: Step 4 is going to take a good chunk of time.

NOTE: If step 4 fails at any stage, you should delete links and visits data from the database and try again.

// 1. Migrate data: Hosts
node production-server/migration/01_hosts.js

// 2. Migrate data: Users
node production-server/migration/02_users.js

// 3. Migrate data: Domains
node production-server/migration/03_domains.js

// 4. Migrate data: Links
node production-server/migration/04_links.js