Schema migration tools?

Started by Christophe Pettusalmost 18 years ago11 messagesgeneral
Jump to latest
#1Christophe Pettus
xof@thebuild.com

Greetings,

We have the traditional three servers:

dev --> staging --> production

each with a PostgreSQL instance and the same schema, at least over
time. Right now, we handle schema migration (updating the schema for
new releases) by manually-created scripts that apply the changes to
staging and production.

I'd like a tool that would automatically create these scripts, and I
wondered if anything like this existed. The theory would be that it
would consider two databases a and b, and produce the appropriate
script to change b's schema to match a.

Does anything like this exist? If not, I might have a new project...

Thanks!
-- Christophe

#2Joshua D. Drake
jd@commandprompt.com
In reply to: Christophe Pettus (#1)
Re: Schema migration tools?

Christophe wrote:

Greetings,
Does anything like this exist? If not, I might have a new project...

Typically new projects are found over at www.pgfoundry.org. :P

Joshua D. Drake

#3Steve Atkins
steve@blighty.com
In reply to: Christophe Pettus (#1)
Re: Schema migration tools?

On Apr 21, 2008, at 7:44 PM, Christophe wrote:

Greetings,

We have the traditional three servers:

dev --> staging --> production

each with a PostgreSQL instance and the same schema, at least over
time. Right now, we handle schema migration (updating the schema
for new releases) by manually-created scripts that apply the changes
to staging and production.

I'd like a tool that would automatically create these scripts, and I
wondered if anything like this existed. The theory would be that it
would consider two databases a and b, and produce the appropriate
script to change b's schema to match a.

Does anything like this exist? If not, I might have a new project...

There's a bunch. I've been using http://dbmstools.sourceforge.net/ for
a while, and some others are http://xml2ddl.berlios.de/ and http://www.liquibase.org/
. They're mostly focused on maintaining the schema in a non-sql-
script format (with good reason) but can extract it from a running
database too.

Or you can just maintain your schema by manually writing version n to n
+1 upgrade scripts and version n to n-1 downgrade scripts and
generating the schema for version n in the obvious way.

Cheers,
Steve

#4Kerri Reno
kreno@yumaed.org
In reply to: Christophe Pettus (#1)
Re: Schema migration tools?

Christophe -

We use LiquiBase: http://www.liquibase.org/home

We don't use it quite the same as what you're proposing, but I think you
could use it that way. When we found it, we did 'Generate Changelog' to
start, then made new changes to the ChangeLog, and applied it to each
database as needed. It has really helped us, because we were forgetting to
apply the changes to the production database that were needed.

Hope this helps!
Kerri

On 4/21/08, Christophe <xof@thebuild.com> wrote:

Greetings,

We have the traditional three servers:

dev --> staging --> production

each with a PostgreSQL instance and the same schema, at least over time.
Right now, we handle schema migration (updating the schema for new
releases) by manually-created scripts that apply the changes to staging and
production.

I'd like a tool that would automatically create these scripts, and I
wondered if anything like this existed. The theory would be that it would
consider two databases a and b, and produce the appropriate script to change
b's schema to match a.

Does anything like this exist? If not, I might have a new project...

Thanks!
-- Christophe

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

--
Yuma Educational Computer Consortium
Compass Development Team
Kerri Reno
kreno@yumaed.org (928) 502-4240
.·:*¨¨*:·. .·:*¨¨*:·. .·:*¨¨*:·.

#5John DeSoi
desoi@pgedit.com
In reply to: Christophe Pettus (#1)
Re: Schema migration tools?

On Apr 21, 2008, at 10:44 PM, Christophe wrote:

I'd like a tool that would automatically create these scripts, and I
wondered if anything like this existed. The theory would be that it
would consider two databases a and b, and produce the appropriate
script to change b's schema to match a.

Does anything like this exist? If not, I might have a new project...

However it happens, you need to *capture* the schema changes that need
to be applied to each database. I don't think you can just compare
schemas and guarantee that database A will be transformed in exactly
the same way as database B. For example, suppose the last text column
name in database B was different from A. How can you determine if the
column was renamed or if the column was dropped and a new column was
added? The semantics of that difference could be very important.

It would be nice if PostgreSQL had some kind of unique reference for
the column, but I think columns are just numbered sequentially as they
are added. It would also be neat to have a built-in way to log the
schema changes.

John DeSoi, Ph.D.

#6Jonathan Bond-Caron
jbondc@gmail.com
In reply to: Kerri Reno (#4)
Re: Schema migration tools?

If you’re looking for a PHP solution, there’s:

http://ezcomponents.org/docs/api/latest/introduction_DatabaseSchema.html

It’s very limited but works for simple schemas, I begun extending it to
support more rigorously SQL-92 schema information (will be released BSD
license at openmv.com).

From: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org] On Behalf Of Kerri Reno
Sent: April 22, 2008 8:44 AM
To: Christophe
Cc: pgsql-general@postgresql.org
Subject: Re: [GENERAL] Schema migration tools?

Christophe -

We use LiquiBase: http://www.liquibase.org/home

We don't use it quite the same as what you're proposing, but I think you
could use it that way. When we found it, we did 'Generate Changelog' to
start, then made new changes to the ChangeLog, and applied it to each
database as needed. It has really helped us, because we were forgetting to
apply the changes to the production database that were needed.

Hope this helps!
Kerri

On 4/21/08, Christophe <xof@thebuild.com> wrote:

Greetings,

We have the traditional three servers:

dev --> staging --> production

each with a PostgreSQL instance and the same schema, at least over time.
Right now, we handle schema migration (updating the schema for new releases)
by manually-created scripts that apply the changes to staging and
production.

I'd like a tool that would automatically create these scripts, and I
wondered if anything like this existed. The theory would be that it would
consider two databases a and b, and produce the appropriate script to change
b's schema to match a.

Does anything like this exist? If not, I might have a new project...

Thanks!
-- Christophe

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

--
Yuma Educational Computer Consortium
Compass Development Team
Kerri Reno
kreno@yumaed.org (928) 502-4240
.·:*¨¨*:·. .·:*¨¨*:·. .·:*¨¨*:·.

#7Erik Jones
erik@myemma.com
In reply to: John DeSoi (#5)
Re: Schema migration tools?

On Apr 22, 2008, at 3:09 PM, John DeSoi wrote:

It would be nice if PostgreSQL had some kind of unique reference for
the column, but I think columns are just numbered sequentially as
they are added. It would also be neat to have a built-in way to log
the schema changes.

It does: log_statement set to either 'all' or 'ddl' will do the trick.

Erik Jones

DBA | Emma®
erik@myemma.com
800.595.4401 or 615.292.5888
615.292.0777 (fax)

Emma helps organizations everywhere communicate & market in style.
Visit us online at http://www.myemma.com

#8John DeSoi
desoi@pgedit.com
In reply to: Erik Jones (#7)
Re: Schema migration tools?

On Apr 22, 2008, at 4:53 PM, Erik Jones wrote:

It would be nice if PostgreSQL had some kind of unique reference
for the column, but I think columns are just numbered sequentially
as they are added. It would also be neat to have a built-in way to
log the schema changes.

It does: log_statement set to either 'all' or 'ddl' will do the trick.

If I do this, is there a way to get a transaction consistent log of
just the necessary commands to transform another copy of the database?
In other words, I assume this approach will log each DDL command even
if the transaction is rolled back. Correct?

Thanks,

John DeSoi, Ph.D.

#9Erik Jones
erik@myemma.com
In reply to: John DeSoi (#8)
Re: Schema migration tools?

On Apr 22, 2008, at 4:33 PM, John DeSoi wrote:

On Apr 22, 2008, at 4:53 PM, Erik Jones wrote:

It would be nice if PostgreSQL had some kind of unique reference
for the column, but I think columns are just numbered sequentially
as they are added. It would also be neat to have a built-in way to
log the schema changes.

It does: log_statement set to either 'all' or 'ddl' will do the
trick.

If I do this, is there a way to get a transaction consistent log of
just the necessary commands to transform another copy of the
database? In other words, I assume this approach will log each DDL
command even if the transaction is rolled back. Correct?

Right. It's not something you'd want to lift directly and run
somewhere else.

Erik Jones

DBA | Emma®
erik@myemma.com
800.595.4401 or 615.292.5888
615.292.0777 (fax)

Emma helps organizations everywhere communicate & market in style.
Visit us online at http://www.myemma.com

#10Sualeh Fatehi
sualeh.fatehi@gmail.com
In reply to: Christophe Pettus (#1)
Re: Schema migration tools?

Christophe,

I agree with Dr. DeSoi that it may not always be possible to automate
schema transformations. However, if you need to compare the metadata
between two databases, the free, open-source SchemaCrawler for SQL
Server tool will do this for you. You can take human-readable
snapshots of the schema and data, for later comparison. Comparisons
are done using a standard diff tool such as WinMerge. SchemaCrawler
outputs details of your schema (tables, views, procedures, and more)
in a diff-able plain-text format (text, CSV, or XHTML). SchemaCrawler
can also output data (including CLOBs and BLOBs) in the same plain-
text formats.

SchemaCrawler is available at SourceForge:
http://schemacrawler.sourceforge.net/

Sualeh Fatehi

#11Scott Ribe
scott_ribe@killerbytes.com
In reply to: Sualeh Fatehi (#10)
Re: Schema migration tools?

It's not open source; it's expensive; but the products from Embarcadero work
pretty well.

--
Scott Ribe
scott_ribe@killerbytes.com
http://www.killerbytes.com/
(303) 722-0567 voice