<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: dband drm</title>
    <description>The latest articles on DEV Community by dband drm (@dband-drm).</description>
    <link>https://dev.to/dband-drm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3760580%2F35b4f7a9-e591-44f5-991e-0c7769690201.jpeg</url>
      <title>DEV Community: dband drm</title>
      <link>https://dev.to/dband-drm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dband-drm"/>
    <language>en</language>
    <item>
      <title>drm-cli v1.1 is out — PostgreSQL, Oracle, Liquibase &amp; Flyway now supported</title>
      <dc:creator>dband drm</dc:creator>
      <pubDate>Fri, 10 Apr 2026 05:15:31 +0000</pubDate>
      <link>https://dev.to/dband-drm/drm-cli-v11-is-out-postgresql-oracle-liquibase-flyway-now-supported-228m</link>
      <guid>https://dev.to/dband-drm/drm-cli-v11-is-out-postgresql-oracle-liquibase-flyway-now-supported-228m</guid>
      <description>&lt;p&gt;We shipped drm-cli v1.1 this week.&lt;/p&gt;

&lt;p&gt;If you haven't heard of drm-cli before: it's a free, open-source database release manager that layers on top of your existing tools — Liquibase, Flyway, SSDT — and adds release history, encrypted credentials, automated retries, and multi-solution deployments. It doesn't replace your migration toolchain. It wraps it and fills the gaps that migration tools were never designed to fill.&lt;/p&gt;

&lt;p&gt;v1.0 supported SQL Server via SSDT and &lt;code&gt;sqlpackage&lt;/code&gt;. That covered a lot of ground for us, but it wasn't enough.&lt;/p&gt;

&lt;p&gt;Here's what changed in v1.1.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's new in v1.1
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PostgreSQL support
&lt;/h3&gt;

&lt;p&gt;drm-cli now supports PostgreSQL deployments via Liquibase or Flyway. You configure your solution with &lt;code&gt;db_type: postgresql&lt;/code&gt;, point it at your changelog or migration directory, and drm-cli handles the rest — connection string encryption, release history tracking, retry logic, pre/post scripts.&lt;/p&gt;

&lt;p&gt;Same release model you'd use for SQL Server, now for Postgres.&lt;/p&gt;

&lt;h3&gt;
  
  
  Oracle support
&lt;/h3&gt;

&lt;p&gt;Oracle deployments via Liquibase or Flyway are now supported. If you've ever tried to wrangle Oracle connection strings, schema differences, and deployment sequencing across environments, you know why this matters. drm-cli treats Oracle the same as any other database in the release — same config structure, same audit trail, same retry behavior.&lt;/p&gt;

&lt;p&gt;No separate toolchain for Oracle. No separate release process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Liquibase and Flyway integration
&lt;/h3&gt;

&lt;p&gt;v1.0 relied on &lt;code&gt;sqlpackage&lt;/code&gt; for SQL Server. In v1.1, Liquibase and Flyway are first-class execution engines.&lt;/p&gt;

&lt;p&gt;You configure which engine to use per solution. drm-cli invokes it, captures the output, evaluates success or failure, and records the result. If something fails, the retry logic kicks in. The audit trail captures what ran, when, and what the outcome was — regardless of which engine executed it.&lt;/p&gt;

&lt;p&gt;If your team already uses Liquibase or Flyway, drm-cli doesn't ask you to change that. It sits on top of what you already have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre/post deployment scripts
&lt;/h3&gt;

&lt;p&gt;This one came directly from operational pain.&lt;/p&gt;

&lt;p&gt;Before deploying, you might need to run a notification script, disable a job, or snapshot something. After deploying, you might need to re-enable that job, run a smoke test, or hit an API. These steps are easy to forget, easy to skip under pressure, and expensive when missed.&lt;/p&gt;

&lt;p&gt;v1.1 introduces &lt;code&gt;pre_scripts&lt;/code&gt; and &lt;code&gt;post_scripts&lt;/code&gt; at the solution level. You define the scripts once. drm-cli runs them every time, in order, before and after the main deployment — regardless of which database or execution engine is involved.&lt;/p&gt;

&lt;p&gt;We'll cover the pre/post pattern in depth in a dedicated post in Week 6. For now: the short version is that anything you'd put in a "don't forget to" comment in your runbook should be a pre/post script instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Encrypted connection strings (extended)
&lt;/h3&gt;

&lt;p&gt;Credential encryption was in v1.0, but v1.1 extends it to cover PostgreSQL and Oracle connection strings. The mechanism is the same — drm-cli can encrypt your connection strings at rest and decrypt them at deploy time. No plaintext credentials sitting in your release config.&lt;/p&gt;

&lt;p&gt;The video linked below walks through a deployment using encrypted credentials end-to-end.&lt;/p&gt;




&lt;h2&gt;
  
  
  What stayed the same
&lt;/h2&gt;

&lt;p&gt;The core model hasn't changed. drm-cli reads a release config, executes solutions in order, tracks the result of each one, and writes the history to a release log. If a solution fails, it retries. If it fails past the retry threshold, it stops and reports.&lt;/p&gt;

&lt;p&gt;v1.0 users can upgrade without changing their existing config. The only required change is adding &lt;code&gt;db_type&lt;/code&gt; if you're adding a new PostgreSQL or Oracle solution — existing SSDT solutions default to their previous behavior.&lt;/p&gt;

&lt;p&gt;We'll write the full upgrade guide in Week 8. The short version: it's a pip install and an optional config update.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick look at the v1.1 config
&lt;/h2&gt;

&lt;p&gt;Here's what a basic v1.1 release config looks like with mixed database types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Q2-2026-release-01"&lt;/span&gt;
  &lt;span class="na"&gt;solutions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;core-schema"&lt;/span&gt;
      &lt;span class="na"&gt;db_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sqlserver&lt;/span&gt;
      &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ssdt&lt;/span&gt;
      &lt;span class="na"&gt;dacpac&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./build/CoreSchema.dacpac"&lt;/span&gt;
      &lt;span class="na"&gt;connection_string&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;encrypted:&amp;lt;cipher&amp;gt;"&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;analytics-db"&lt;/span&gt;
      &lt;span class="na"&gt;db_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresql&lt;/span&gt;
      &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;liquibase&lt;/span&gt;
      &lt;span class="na"&gt;changelog&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./liquibase/changelog.xml"&lt;/span&gt;
      &lt;span class="na"&gt;connection_string&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;encrypted:&amp;lt;cipher&amp;gt;"&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reporting-oracle"&lt;/span&gt;
      &lt;span class="na"&gt;db_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;oracle&lt;/span&gt;
      &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;flyway&lt;/span&gt;
      &lt;span class="na"&gt;migration_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./flyway/migrations"&lt;/span&gt;
      &lt;span class="na"&gt;connection_string&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;encrypted:&amp;lt;cipher&amp;gt;"&lt;/span&gt;
      &lt;span class="na"&gt;pre_scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./scripts/pre/disable_job.sh"&lt;/span&gt;
      &lt;span class="na"&gt;post_scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./scripts/post/enable_job.sh"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SQL Server, PostgreSQL, and Oracle. Three different execution engines. One release. One audit trail.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to install or upgrade
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;New install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;drm-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Upgrade from v1.0:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; drm-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;drm &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see &lt;code&gt;drm-cli 1.1.x&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The full release notes are on the &lt;a href="https://github.com/dband-drm/drm-cli/releases/tag/v1.1.0" rel="noopener noreferrer"&gt;drm-cli GitHub repo&lt;/a&gt;. Open issues and feature requests there.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's coming in the next few weeks
&lt;/h2&gt;

&lt;p&gt;Over the next several posts we'll go deep on each of the new capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Week 4&lt;/strong&gt; — Step-by-step: deploying to PostgreSQL with Liquibase or Flyway&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 5&lt;/strong&gt; — Oracle deployments without the enterprise license overhead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 6&lt;/strong&gt; — The pre/post script pattern in detail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're already using drm-cli and upgrade to v1.1, let us know how it goes. If you hit anything unexpected, open an issue. We read them all.&lt;/p&gt;

&lt;p&gt;And if this is the first time you're hearing about drm-cli — the &lt;a href="https://dev.to/dband"&gt;Week 2 post&lt;/a&gt; covers the problem we built it to solve. Start there if you want the full context before diving into v1.1.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;drm-cli is free and open-source. No license tiers, no paid features, no freemium model. Everything described here is available to everyone.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>devops</category>
      <category>opensource</category>
      <category>postgres</category>
    </item>
    <item>
      <title>The Gap Between Database Version Control and Release Management</title>
      <dc:creator>dband drm</dc:creator>
      <pubDate>Thu, 02 Apr 2026 16:15:00 +0000</pubDate>
      <link>https://dev.to/dband-drm/the-gap-between-database-version-control-and-release-management-2d1f</link>
      <guid>https://dev.to/dband-drm/the-gap-between-database-version-control-and-release-management-2d1f</guid>
      <description>&lt;p&gt;If you've been using Liquibase or Flyway for a while, you already know they solve a real problem. Migrations are tracked. Schema changes are repeatable. Your database evolves in lock-step with your application code.&lt;/p&gt;

&lt;p&gt;So why does deploying a database change still feel fragile?&lt;/p&gt;

&lt;p&gt;We asked ourselves the same question. We were running Liquibase in production across multiple environments, with a reasonably mature pipeline. Migrations were clean. The versioning worked. But the &lt;em&gt;release&lt;/em&gt; — the actual act of getting a change from dev to test to production, with confidence — still had gaps we were plugging with shell scripts, spreadsheets, and hope.&lt;/p&gt;

&lt;p&gt;This is the problem drm-cli was built to solve.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Liquibase and Flyway Actually Do
&lt;/h2&gt;

&lt;p&gt;Let's be precise here, because nothing in this post is a criticism of either tool. Liquibase and Flyway are excellent. We still use them.&lt;/p&gt;

&lt;p&gt;What they do: &lt;strong&gt;track and apply schema changes&lt;/strong&gt;. Given a target database and a set of migrations, they work out which changes haven't been applied and apply them in the right order. That's the core job, and they do it well.&lt;/p&gt;

&lt;p&gt;What they're not designed to be: &lt;strong&gt;a release management layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The distinction matters. Version control is about tracking &lt;em&gt;what&lt;/em&gt; changed. Release management is about controlling &lt;em&gt;how&lt;/em&gt; and &lt;em&gt;when&lt;/em&gt; that change reaches each environment — with history, error handling, credential management, and coordination across multiple systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gaps We Kept Running Into
&lt;/h2&gt;

&lt;p&gt;Here's what we found missing when we tried to treat Liquibase alone as a full release management solution:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. No release history&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Liquibase maintains a &lt;code&gt;DATABASECHANGELOG&lt;/code&gt; table per database. That's a migration history. It tells you what migrations have been applied to that database. It doesn't tell you &lt;em&gt;who&lt;/em&gt; ran the release, &lt;em&gt;when&lt;/em&gt;, from &lt;em&gt;which&lt;/em&gt; version of the release package, or whether the release across all your environments succeeded. There's no audit trail at the release level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. No encrypted credential management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your connection strings contain passwords. If you're running migrations from a CI pipeline or a deployment server, those credentials need to live somewhere. Liquibase and Flyway accept them as arguments or environment variables — but they don't provide a mechanism for encrypting them at rest. The moment your pipeline config ends up in a screenshot or a log, you have a problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. No automated retry or failure recovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A migration fails at step 4 of 12. Now what? Liquibase will tell you what happened. It won't automatically retry the failed step, skip to a recovery path, or log the failure in a structured way that your team can act on without hunting through console output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. No multi-solution coordination&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your release touches a SQL Server SSDT project &lt;em&gt;and&lt;/em&gt; a Liquibase changelog &lt;em&gt;and&lt;/em&gt; a set of Oracle scripts. These are separate tools with separate invocations. Running them in the right order, capturing failures across all of them, and producing a single release record — there's nothing in any one tool that handles this. You write glue code. We all write glue code. Most of it is fragile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. No cross-platform release definition&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How do you define a release that runs the same way on a Windows deployment server and a Linux CI agent? With Liquibase or Flyway alone, your answer is usually "a shell script on Linux and a batch file on Windows." drm-cli is written in Python and runs identically on both.&lt;/p&gt;




&lt;h2&gt;
  
  
  Versioning vs. Releasing: A Concrete Example
&lt;/h2&gt;

&lt;p&gt;Imagine you're deploying a change that does all of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updates three tables in your SQL Server application database (via SSDT)&lt;/li&gt;
&lt;li&gt;Applies a new Liquibase changelog to a PostgreSQL reporting database&lt;/li&gt;
&lt;li&gt;Runs a post-deployment script that refreshes a materialized view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Liquibase and Flyway, you have the migration layer covered for the databases they manage. But you're still answering these questions manually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What order do these run in?&lt;/li&gt;
&lt;li&gt;What happens if the PostgreSQL migration succeeds but the post-deployment script fails?&lt;/li&gt;
&lt;li&gt;Where is the record of this release — what ran, when, and with what outcome?&lt;/li&gt;
&lt;li&gt;How do I re-run just the failed step without re-running the whole thing?&lt;/li&gt;
&lt;li&gt;How do I pass credentials to each tool without hardcoding them in the pipeline?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are release management questions. Liquibase isn't trying to answer them. It shouldn't have to. That's a different layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What drm-cli Adds on Top
&lt;/h2&gt;

&lt;p&gt;drm-cli doesn't replace Liquibase or Flyway. It wraps and extends them.&lt;/p&gt;

&lt;p&gt;You define a release in a YAML file. That file tells drm-cli:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which tools to invoke (Liquibase, Flyway, SSDT's &lt;code&gt;sqlpackage&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;In what order&lt;/li&gt;
&lt;li&gt;Against which databases (SQL Server, PostgreSQL, Oracle — or all three)&lt;/li&gt;
&lt;li&gt;With which credentials (stored encrypted, decrypted at runtime)&lt;/li&gt;
&lt;li&gt;With which pre/post scripts to run around each step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;drm-cli then executes the release, handles failures with configurable retries, and writes a structured release history entry — regardless of how many tools were involved or how many databases were touched.&lt;/p&gt;

&lt;p&gt;Here's a minimal example. A &lt;code&gt;release.yml&lt;/code&gt; for a single PostgreSQL deployment using Liquibase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v2.4.1"&lt;/span&gt;
  &lt;span class="na"&gt;solutions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reporting-db&lt;/span&gt;
      &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;liquibase&lt;/span&gt;
      &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresql&lt;/span&gt;
      &lt;span class="na"&gt;changelog&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;changelogs/reporting/changelog.xml&lt;/span&gt;
      &lt;span class="na"&gt;connection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;connections/reporting.enc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it for the definition. drm-cli handles the invocation, the logging, and the history.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note on What drm-cli Is Not
&lt;/h2&gt;

&lt;p&gt;We want to be honest about scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn't write your migrations for you&lt;/li&gt;
&lt;li&gt;It doesn't manage your Liquibase or Flyway configuration beyond invocation&lt;/li&gt;
&lt;li&gt;It doesn't replace your CI/CD pipeline — it runs &lt;em&gt;inside&lt;/em&gt; it&lt;/li&gt;
&lt;li&gt;It's not trying to be an all-in-one database platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a release management layer. Narrow scope, done well.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;drm-cli is free and open-source. Installation takes about two minutes.&lt;/p&gt;

&lt;p&gt;The interactive installer (the fastest way to get started on any platform) is shown in this walkthrough:&lt;/p&gt;

&lt;p&gt;▶️ [drm-cli interactive installation — video]&lt;/p&gt;

&lt;p&gt;Or install directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;drm-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The documentation is at [docs link] and the source is on GitHub at [repo link].&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Next week we'll announce drm-cli v1.1 — which adds full PostgreSQL and Oracle support, Flyway integration alongside Liquibase, and pre/post deployment script support.&lt;/p&gt;

&lt;p&gt;If the problem we described here is familiar, the v1.1 announcement is worth watching for.&lt;/p&gt;

&lt;p&gt;In the meantime, if you've hit any of these gaps in your own Liquibase or Flyway setup, we'd genuinely like to hear how you've been handling them. Drop a comment below.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;drm-cli is built and maintained by &lt;a href="https://d-band.io" rel="noopener noreferrer"&gt;d-band&lt;/a&gt;. Free. Open-source. No license cost.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>devops</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>We're d-band — Here's Why We Build Open-Source Tools</title>
      <dc:creator>dband drm</dc:creator>
      <pubDate>Mon, 23 Mar 2026 16:12:01 +0000</pubDate>
      <link>https://dev.to/dband-drm/were-d-band-heres-why-we-build-open-source-tools-1i36</link>
      <guid>https://dev.to/dband-drm/were-d-band-heres-why-we-build-open-source-tools-1i36</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the first post from d-band. We're not launching a product today. We're introducing ourselves.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  We Built What We Needed
&lt;/h2&gt;

&lt;p&gt;A few years ago, we were running database deployments across multiple environments, multiple databases, and multiple tools. Liquibase for one system, SSDT for another, custom shell scripts to glue it all together, a shared spreadsheet to track what actually deployed where.&lt;/p&gt;

&lt;p&gt;It worked. Until it didn't.&lt;/p&gt;

&lt;p&gt;The spreadsheet went stale. Scripts diverged between environments. A rollback that should have taken ten minutes took three hours because nobody could say with confidence what state the target database was actually in.&lt;/p&gt;

&lt;p&gt;We looked for a tool that could tie all of this together — something that sat on top of the tools we already had, tracked deployment history properly, handled credentials securely, and let us run a full release across multiple databases without stitching together a dozen scripts.&lt;/p&gt;

&lt;p&gt;We didn't find one that hit all of those marks without a significant license cost or a full platform migration.&lt;/p&gt;

&lt;p&gt;So we built one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who We Are
&lt;/h2&gt;

&lt;p&gt;d-band is a small team of data engineers and DevOps practitioners. We do consulting work — helping organizations build and maintain data infrastructure — and alongside that, we build tooling.&lt;/p&gt;

&lt;p&gt;We're not a VC-backed startup optimizing for growth metrics. We're practitioners who got frustrated with a gap in the ecosystem and decided to fill it.&lt;/p&gt;

&lt;p&gt;That gap is database release management. Not version control — that problem is largely solved. Release management: the process of taking your versioned schema changes and actually getting them deployed, reliably, with a full audit trail, across all the databases you care about.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Believe
&lt;/h2&gt;

&lt;p&gt;A few things we think are true about tooling in this space:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source is the right model.&lt;/strong&gt; Database tooling has a long history of "free tier, enterprise price." We think that creates the wrong incentives. When a tool is fully free and open-source, the authors have to earn trust through quality, not through feature gating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't replace what works.&lt;/strong&gt; Liquibase and Flyway are good tools. SSDT is genuinely useful for SQL Server shops. We're not interested in building a competitor to those tools — we're interested in building the layer above them that handles the parts they don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;History matters.&lt;/strong&gt; Every deployment should be recorded. Not in a log file that someone might or might not check — in a queryable release history that's part of your workflow. When something goes wrong at 2am, you should be able to answer "what changed, when, and where" in under a minute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security shouldn't be an afterthought.&lt;/strong&gt; Connection strings containing credentials shouldn't live in plaintext config files. This is obvious in principle and routinely ignored in practice. We built credential encryption into drm-cli from the start.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We're Releasing
&lt;/h2&gt;

&lt;p&gt;Our first public tool is &lt;strong&gt;drm-cli&lt;/strong&gt; — a free, open-source database release manager that layers on top of Liquibase, Flyway, and SSDT.&lt;/p&gt;

&lt;p&gt;It handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Release history tracking&lt;/strong&gt; — every deployment recorded, queryable, auditable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted credentials&lt;/strong&gt; — connection strings encrypted at rest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated retries and failure recovery&lt;/strong&gt; — deployments that recover gracefully when something transient goes wrong&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-database releases&lt;/strong&gt; — SQL Server, PostgreSQL, and Oracle in a single coordinated release&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre/post deployment scripts&lt;/strong&gt; — steps that always run before or after every deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform&lt;/strong&gt; — Windows, Linux, macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're not going to go deep on any of those today. Each of them deserves its own post, with real config examples and real commands. That's what's coming over the next several weeks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Post Here
&lt;/h2&gt;

&lt;p&gt;We're building in public because we think that's how open-source tooling should work.&lt;/p&gt;

&lt;p&gt;Over the next few weeks, we'll be posting technical tutorials, honest write-ups of what we got wrong and had to rethink, and a full walkthrough of what drm-cli v1.1 can do. Not press releases — actual technical content that's useful whether or not you ever touch our tool.&lt;/p&gt;

&lt;p&gt;If any of this is relevant to problems you're dealing with, follow along. We'd rather earn readers through useful content than through a product announcement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to Find Us
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/d-band/drm-cli" rel="noopener noreferrer"&gt;github.com/d-band/drm-cli&lt;/a&gt; — the repo, the docs, and the issue tracker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;drm-cli docs:&lt;/strong&gt; full documentation is in the repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This blog&lt;/strong&gt; — we'll be posting here regularly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next week: what drm-cli actually is, what problem it solves, and why Liquibase and Flyway alone aren't enough for release management.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We're d-band. We build things we need. If you need them too, that's a bonus.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>devops</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>What's your biggest database deployment pain point?</title>
      <dc:creator>dband drm</dc:creator>
      <pubDate>Sat, 14 Feb 2026 15:17:48 +0000</pubDate>
      <link>https://dev.to/dband-drm/whats-your-biggest-database-deployment-pain-point-514k</link>
      <guid>https://dev.to/dband-drm/whats-your-biggest-database-deployment-pain-point-514k</guid>
      <description>&lt;p&gt;After spending countless hours debugging database deployment drift across multiple databases on different environments, we decided to build something better.&lt;/p&gt;

&lt;p&gt;The problem was simple but painful:&lt;br&gt;
→ Juggling multiple deployment tools for Oracle, PostgreSQL, SQL Server&lt;br&gt;
→ No unified interface for database releases&lt;br&gt;
→ Manual tracking of what's deployed where&lt;br&gt;
→ Deployments failed with no retry mechanism&lt;br&gt;
→ Team wasted hours tracking down issues&lt;/p&gt;

&lt;p&gt;So we built DRM-CLI - a unified Python CLI that:&lt;br&gt;
✓ Single interface for Oracle, PostgreSQL, SQL Server&lt;br&gt;
✓ Built-in retry mechanism for resilient deployments&lt;br&gt;
✓ Parallel execution for multiple targets&lt;br&gt;
✓ Complete deployment tracking (SQLite or JSON)&lt;br&gt;
✓ Secure encryption for sensitive configs&lt;br&gt;
✓ Integrates with Flyway, Liquibase, sqlpackage&lt;/p&gt;

&lt;p&gt;Built with Python for cross-platform support (Windows &amp;amp; Linux)&lt;br&gt;
Open source under MIT license&lt;/p&gt;

&lt;p&gt;The response from our DBA team has been incredible - we're deploying faster and catching issues before they hit production.&lt;/p&gt;

&lt;p&gt;If you're managing database deployments across multiple environments, check it out:&lt;br&gt;
🔗 &lt;a href="https://github.com/dband-drm/drm-cli" rel="noopener noreferrer"&gt;https://github.com/dband-drm/drm-cli&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="https://www.linkedin.com/company/d-band" rel="noopener noreferrer"&gt;https://www.linkedin.com/company/d-band&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="https://www.d-band.com/" rel="noopener noreferrer"&gt;https://www.d-band.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's your biggest database deployment pain point?&lt;/p&gt;

&lt;h1&gt;
  
  
  Database #DevOps #DBA #Oracle #PostgreSQL #SQLServer #OpenSource #DataOps
&lt;/h1&gt;

</description>
      <category>database</category>
      <category>devops</category>
      <category>dataops</category>
      <category>dba</category>
    </item>
  </channel>
</rss>
