Re: Idempotent DDL Updates - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Idempotent DDL Updates
Date
Msg-id d1297be4-d17b-0fdb-cd9e-c1ed6f6e7539@aklaver.com
Whole thread Raw
In response to Re: Idempotent DDL Updates  (Miles Elam <miles.elam@productops.com>)
List pgsql-general
On 8/30/21 8:56 AM, Miles Elam wrote:
> 
> 
> On Fri, Aug 27, 2021 at 7:14 PM Julien Rouhaud <rjuju123@gmail.com 
> <mailto:rjuju123@gmail.com>> wrote:
> 
> 
>     Note that the IF EXISTS / IF NOT EXISTS are *not* idempotent.  If you
>     need to write idempotent schema update scripts, you need to query the
>     catalogs to check if the specific change you want to apply has already
>     been applied or not.
> 
> Poor choice of words. You're absolutely right. The goal is for the 
> script to be idempotent, not that individual statements like that are 
> idempotent.
> 
> For example, adding ADD COLUMN foo IF NOT EXISTS and DROP COLUMN… to the 
> script in addition to CREATE TABLE IF NOT EXISTS statements so that the 
> end result is always the same column definitions no matter how often the 
> script is run.
> 
> Eventually the individual ADD and DROP COLUMN statements can be removed 
> once all databases are up to date.
> 
> Not sure that querying the catalogs is strictly necessary though… Could 
> you say more?
> 
> This removes the ability to have "down" migration scripts, but I'll be 
> honest, I've never actually used a "down" script in production. If the 
> "up" script failed for some reason, the validity of the logic in the 
> "down" script is immediately suspect. It's always a new "up" script to 
> fix the problem. That's leaving aside the issue of "down" scripts not 
> getting anywhere near the same level of scrutiny and testing as "up" 
> migration scripts get.

I think you need to investigate Sqitch:

https://sqitch.org/

When working on dev database I run the deploy(up) script and then the 
revert(down) every time I do a change to make sure it does work. Not 
only that I routinely revert back to some previous state. Helped by 
Sqitch tags that allow you set a marker in your change history. I'm 
going to say that if you spend some time with the documentation you will 
find that Sqitch is the scratch that eliminates your itch:)


> 
> - Miles


-- 
Adrian Klaver
adrian.klaver@aklaver.com



pgsql-general by date:

Previous
From: Vijaykumar Jain
Date:
Subject: vacuum full
Next
From: Vijaykumar Jain
Date:
Subject: Re: vacuum full