Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tvIVS-003DU3-2G for pgsql-general@arkaria.postgresql.org; Thu, 20 Mar 2025 16:12:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tvIVQ-004CfS-QT for pgsql-general@arkaria.postgresql.org; Thu, 20 Mar 2025 16:12:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tvIVQ-004CfG-Fn for pgsql-general@lists.postgresql.org; Thu, 20 Mar 2025 16:12:28 +0000 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tvIVO-0009ua-0P for pgsql-general@lists.postgresql.org; Thu, 20 Mar 2025 16:12:27 +0000 Received: by mail-qv1-xf31.google.com with SMTP id 6a1803df08f44-6e8f9c5b09dso876966d6.0 for ; Thu, 20 Mar 2025 09:12:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742487145; x=1743091945; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pRk7fEcldpAG8USquxhIWp+ZDezByNiz83SVU4hOn3k=; b=HUqXa30p0M2q0QBgRxu4OpGGInCHg1aa/4zhb+Z+uFl84dEY1ttOY4ubfduHcDuBta TuNKmRf8r2ZucM6CoIs6NmstSF5ogNUq8ABTgUbRuZhSps2PO8gvU9+8Ifrr+XSFiKck JNRmeOd7OY6xFAN2EkZRlWhmPkbuT2ZLAIUaUD9cAihGLxiAr+BoXQOzzMjDt4YylaJh XstkkNcXzWeM1OsM2FGhir4ue7SDGUIVjoHFcbPRWdnWaEI1ipT0DTUc1yRdU/Job6Gp iDxQuudrN0670W7gDwcHoX8vu+XPhnvFh7w9/3na7yeHq6GuOtTw3JXfhP2SvVWGI7mi EBYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742487145; x=1743091945; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pRk7fEcldpAG8USquxhIWp+ZDezByNiz83SVU4hOn3k=; b=Qk5ya8KHkpTyFxg3+x8jlwnnXATu8+DTO9TSr3CoCC0TmmhKsxjD2tyN91Fmd7zUSS fh5G40u9j4/o27Iq8J2mTuMbtLJrjvokjp3N3JIff5btmQ0sbjZ9m2E9zIWMqydBdSi5 AIuV/OueQbKhiUmPdcxm5kk2kfd/wtHaAfLf5VnCq0ru0RUXI0Bn6V1tyxMrVerclqxF G+D7pUE8rEyrSUPftu2Xr2hQz00GbKVMcmhhwfQ+od75TgrH5WJ5JTz5d3FCuPrRDb0i vMm0ZcI52isvD06WlaqFvFdVugEWfwJfP41C5/Oe3wSiFVPLed0sK+enhiREJLkNJjMS RuQQ== X-Gm-Message-State: AOJu0Yw8WVSk0L19sODUf+RQTTWneG978nx66Fv5z8nzpHUZzEV45Tqh KXlOtHpfXIugJnOwhpjnxYYze9RjhCkygDOtAgrgupiQ6qOwP2ypaZCxZlRqhdgY6vCOtE/uuMf 3dF7OaS6zTrlIjr+Bq5Cu8X0xC74= X-Gm-Gg: ASbGncvnueyCHJDKUZq9j1MVdwiOoSDvdM0zvGprf43v1dqecHOKmjjjBn8nouLK5eJ zAdOxLjnx4tpbjgNjclHNOqV4PlCZ2fT1EvKjR2DCRzVD0uqq6i7rH2mkRl8gPJU0z2+s1QCL2s JeBqO7u/9uZktj8BcLgdXoXQkVNg== X-Google-Smtp-Source: AGHT+IH0NMh5j6zX4vDTrvi8H9i6rJO4t+c8TcGYpQfFNFUdedGif52rx55ndLc5lFih3wKvCN/YAZh3XWYtdJOuxso= X-Received: by 2002:a05:6214:27e9:b0:6e8:f1b6:a123 with SMTP id 6a1803df08f44-6eb2bab59c4mr37312796d6.10.1742487144903; Thu, 20 Mar 2025 09:12:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Adam Brusselback Date: Thu, 20 Mar 2025 12:12:09 -0400 X-Gm-Features: AQ5f1JpD6iqUDVAnfL5zaN7UpwpHua6ooW63OpyE7w326pFTaUJz6jUuhmjd4qU Message-ID: Subject: Re: Postgres incremental database updates thru CI/CD To: Puspendu Panda Cc: pgsql-general@lists.postgresql.org Content-Type: multipart/alternative; boundary="0000000000004c36080630c867ae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004c36080630c867ae Content-Type: text/plain; charset="UTF-8" There are no built in tools for this in Postgres. There are other tools like the one mentioned that you can use instead. I've used Liquibase for migrations for multiple companies now and it works well enough. If you have to support rollbacks for your deployments, that is a pretty manual process for any serious migration (especially migrations requiring data movement) in my experience. Also set up something that requires all PRs to be able to apply update, rollback, and apply update again and still be in the same state as if you only applied the update once. For my current project, I have my liquibase integrated with my Spring Boot backend, and CI/CD just deploys that artifact and on startup of the backend the migrations are run. At my last company the liquibase portion was standalone because we had a single database that had multiple products interacting with it and we needed to be able to handle migrations separately than any one specific app, so that was deployed directly through CI/CD. --0000000000004c36080630c867ae Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
There are no built in tools for this in Postgres= .

There are other tools like the one mentioned that you can us= e instead. I've used Liquibase for migrations for multiple companies no= w and it works well enough.
If you have to support rollbacks for = your deployments, that is a pretty manual process for any serious migration= (especially migrations requiring data movement) in my experience. Also set= up something that requires all PRs to be able to apply update, rollback, a= nd apply update again and still be in the same state as if you only applied= the update once.

For my current project, I have m= y liquibase integrated with my Spring Boot backend, and CI/CD just deploys = that artifact and on startup of the backend the migrations are run. At my l= ast company the liquibase portion was standalone because we had a single da= tabase that had multiple products interacting with it and we needed to be a= ble to handle migrations separately than any one specific app, so that was = deployed directly through CI/CD.
--0000000000004c36080630c867ae--