--- title: Get started with Liquibase and Neon subtitle: Learn how to manage schema changes in Neon with Liquibase enableTableOfContents: true updatedOn: '2025-08-02T10:33:29.277Z' --- Liquibase is an open-source library for tracking, managing, and applying database schema changes. To learn more about Liquibase, refer to the [Liquibase documentation](https://docs.liquibase.com/home.html). This guide steps you through installing the Liquibase CLI, configuring Liquibase to connect to a Neon database, deploying a database schema change, and rolling back the schema change. The guide follows the setup described in the [Liquibase Get Started](https://www.liquibase.org/get-started/quickstart). ## Prerequisites - A Neon account. See [Sign up](/docs/get-started/signing-up). - A Neon project. See [Create your first project](/docs/get-started/setting-up-a-project). - Liquibase requires Java. For Liquibase Java requirements, see [Requirements](https://docs.liquibase.com/start/install/liquibase-requirements.html). To check if you have Java installed, run `java --version`, or `java -version` on macOS. ## Download and extract Liquibase 1. Download the Liquibase CLI from [https://www.liquibase.com/download](https://www.liquibase.com/download). 2. Extract the Liquibase files. For example: ```bash cd ~/Downloads mkdir ~/liquibase tar -xzvf liquibase-x.yy.z.tar.gz -C ~/liquibase/ ``` 3. Open a command prompt to view the contents of your Liquibase installation: ```bash cd ~/liquibase ls ABOUT.txt GETTING_STARTED.txt licenses liquibase.bat changelog.txt internal LICENSE.txt README.txt examples lib liquibase UNINSTALL.txt ``` ## Set your path variable Add the Liquibase directory to your `PATH` so that you can run Liquibase commands from any location. ```bash echo 'export PATH=$PATH:/path/to/liquibase' >> ~/.bashrc source ~/.bashrc ``` ```bash echo 'export PATH=$PATH:/path/to/liquibase' >> ~/.profile source ~/.profile ``` ```bash echo 'export PATH=$PATH:/path/to/liquibase' >> ~/.zshrc source ~/.zshrc ``` ## Verify your installation Verify that the Liquibase installation was successful by running the following command: ```bash liquibase --version ... Liquibase Version: x.yy.z Liquibase Open Source x.yy.z by Liquibase ``` ## Prepare a Neon database For demonstration purposes, create a `blog` database in Neon with two tables, `posts` and `authors`. 1. Open the [Neon Console](https://console.neon.tech/app/projects). 1. Select your project. 1. Select **Databases** from the sidebar and create a database named `blog`. For instructions, see [Create a database](/docs/manage/databases#create-a-database). 1. Using the [Neon SQL Editor](/docs/get-started/query-with-neon-sql-editor), add the following tables: ```sql -- Creating the `authors` table CREATE TABLE authors ( author_id SERIAL PRIMARY KEY, first_name VARCHAR(100), last_name VARCHAR(100), email VARCHAR(255) UNIQUE NOT NULL, bio TEXT ); -- Creating the `posts` table CREATE TABLE posts ( post_id SERIAL PRIMARY KEY, author_id INTEGER REFERENCES authors(author_id), title VARCHAR(255) NOT NULL, content TEXT, published_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ## Retrieve your Neon database connection string Find your database connection string by clicking the **Connect** button on your **Project Dashboard** to open the **Connect to your database** modal. Use the selection drop-down menu. Your Java connection string should look something like the one shown below. ```bash shouldWrap jdbc:postgresql://ep-cool-darkness-123456.us-east-2.aws.neon.tech/blog?user=alex&password=AbC123dEf ``` ## Connect from Liquibase to your Neon database 1. Create a directory for your Liquibase project. For example: ```bash mkdir blogdb ``` 2. Change to your project directory and create a `liquibase.properties` file. ```bash cd blogdb touch liquibase.properties ``` 3. Open the `liquibase.properties` file in an editor and add entries for a [liquibase changelog file](https://docs.liquibase.com/concepts/changelogs/home.html) and your database `url`. We'll call the changelog file `dbchangelog.xml`. You will use this file to define schema changes. For the `url`, specify the Neon connection string you retrieved previously. ```bash shouldWrap changeLogFile:dbchangelog.xml url: jdbc:postgresql://ep-cool-darkness-123456.us-east-2.aws.neon.tech/blog?user=alex&password=AbC123dEf&sslmode=require&channel_binding=require ``` ## Take a snapshot of your database In this step, you will run the [generateChangelog](https://docs.liquibase.com/commands/inspection/generate-changelog.html) command in your project directory to create a changelog file with the current state of your database. We'll call this file `mydatabase_changelog.xml`. ```bash liquibase --changeLogFile=mydatabase_changelog.xml generateChangeLog ``` You’ll get a changelog file for your database that looks something like this: ```xml ``` ## Create a schema change Now, you can start making database schema changes by creating [changesets](https://docs.liquibase.com/concepts/changelogs/changeset.html) and adding them to the database changelog file you defined in your `liquibase.properties` file. A changeset is the basic unit of change in Liquibase. 1. Create the changelog file where you will add your schema changes: ```bash cd ~/blogdb touch dbchangelog.xml ``` 2. Add the following changeset, which adds a `comments` table to your database. Replace `author="alex" id="myIDNumber1234"` with your auther name and id, which you can retrieve from your changelog file, described in the previous step. ```xml ``` ## Deploy your change Deploy your database schema change by running the [update](https://docs.liquibase.com/commands/update/update.html) command: ```bash liquibase update ```
Command output If the command was successful, you’ll see output similar to the following: ```bash Starting Liquibase at 07:33:53 (version 4.24.0 #14062 built at 2023-09-28 12:18+0000) Liquibase Version: 4.24.0 Liquibase Open Source 4.24.0 by Liquibase Running Changeset: dbchangelog.xml::myIDNumber1234::AlexL UPDATE SUMMARY Run: 1 Previously run: 0 Filtered out: 0 ------------------------------- Total change sets: 1 Liquibase: Update has been successful. Rows affected: 1 Liquibase command 'update' was executed successfully. ```
When you run a changeset for the first time, Liquibase automatically creates two tracking tables in your database: - [databasechangelog](https://docs.liquibase.com/concepts/tracking-tables/databasechangelog-table.html): Tracks which changesets have been run. - [databasechangeloglock](https://docs.liquibase.com/concepts/tracking-tables/databasechangeloglock-table.html): Ensures only one instance of Liquibase runs at a time. You can verify these tables were created by viewing the `blog` database on the **Tables** page in the Neon Console. Select **Tables** from the sidebar. ## Rollback a change Try rolling back your last change by running the Liquibase [rollbackCount](https://docs.liquibase.com/commands/rollback/rollback-count.html) command: ```bash liquibase rollbackCount 1 ```
Command output If the command was successful, you’ll see output similar to the following: ```bash Starting Liquibase at 07:36:22 (version 4.24.0 #14062 built at 2023-09-28 12:18+0000) Liquibase Version: 4.24.0 Liquibase Open Source 4.24.0 by Liquibase Rolling Back Changeset: dbchangelog.xml::myIDNumber1234::AlexL Liquibase command 'rollbackCount' was executed successfully. ```
You can verify that creation of the `comments` table was rolled back viewing the `blog` database on the **Tables** page in the Neon Console. Select **Tables** from the sidebar. ## Next steps Learn how to use Liquibase with Neon's database branching feature to set up a developer workflow. See [Set up a developer workflow with Liquibase and Neon](/docs/guides/liquibase-workflow). ## References - [Get started with Liquibase](https://www.liquibase.org/get-started/quickstart) - [Setting up your Liquibase Workspace](https://www.liquibase.org/get-started/setting-up-your-workspace) - [Liquibase Developer Workflow](https://www.liquibase.org/get-started/developer-workflow)