Top-posting is frowned upon by some (not me), but since Bill started it...

I for one will be waiting to see your dbsteward.  How does it compare
functionally or stylistically with Ruby's migration tools (which I found
to be pretty cool and frustrating all in one go).

On 02/10/2011 03:18 PM, Bill Moran wrote:
> 
> We have this kickass solution we built at work called dbsteward that
> just takes care of all of this for us, automatically.  You just give
> it the new version and the old version and it generates update statements
> to feed into PG.
> 
> The reason I'm bringing this up is that we're working to release
> dbsteward as open source for PGCon.  So, if you can wait a bit, you
> can jump on that train.
> 
> In response to Andy Colson <a...@squeakycode.net>:
> 
>> On 2/10/2011 3:38 PM, Royce Ausburn wrote:
>>> Hi all,
>>>
>>> My company is having trouble managing how we upgrade schema changes across 
>>> many versions of our software.  I imagine this is a common problem and 
>>> there're probably some neat solutions that we don't know about.
>>>
>>> For the last 10 years we have been writing bash shell scripts essentially 
>>> numbered in order db0001, db0002, db0003.... The number represents the 
>>> schema version which is recorded in the database and updated by the shell 
>>> scripts.  We have a template that provides all the functionality we need, 
>>> we just copy the script and fill in the blanks.  The schema upgrade scripts 
>>> are committed to svn along with the software changes, and we have a process 
>>> when installing the software at a site that runs the scripts on the DB in 
>>> order before starting up the new version of the software.
>>>
>>> This has worked really well so far.  But  we've effectively only had one 
>>> version of the software in development at any time.  We're now in the habit 
>>> of branching the software to form releases to promote stability when making 
>>> large changes.  The idea is that only really important changes are merged 
>>> in to the releases.  This introduces a bit of a problem when some change 
>>> needs to be merged from one release to another.  The typical problem is 
>>> that we might have two versions of the software 10.0 at schema version 
>>> 10057 and 11.0 at 11023 and we need to merge an important bug fix from 
>>> schema 11023 in to 10.0.  The issue is that 11023 might depend upon changes 
>>> introduced in the schema versions before it.  Or 11023 might introduce 
>>> changes that cause later scripts to break (11000 - 11023) when upgrading 
>>> from 10.0 to 11.0.
>>>
>>> One potential solution is to require that schema changes are never merged 
>>> in to a release, but of course sometimes business requires we do =(
>>>
>>> I'm really interested to hear how you guys manage schema upgrades in the 
>>> face of branches and upgrading from many different versions of the database.
>>>
>>> I've been reading 
>>> http://pyrseas.wordpress.com/2011/02/07/version-control-part-2-sql-databases/
>>>  but I have a feeling that this blog post won't address branches.
>>>
>>> Cheers!
>>>
>>> --Royce
>>>
>>>
>>
>> So, 10.0 at 10057.
>> 11.0 at 11023.
>>
>> then 10.1 needs some fixes so db is bumped to 10058.
>>
>> Then, later, you can upgrade 10057 to 11023, but you cant get 10058 to 
>> 11023.
>>
>> Humm... maybe you need smarter upgrade scripts?  Would having logic in 
>> the script help?  Something like:
>>
>> if not fieldExists('xyz) then alter table ...  add xyz ...
>>
>>
>>
>> Or, maybe your schema numbering system is to broad?  Maybe each table 
>> could have a version number?
>>
>>
>> Or some kinda flags like:
>> create table dbver(key text);
>>
>> then an update would be named: "add xyz to bob".
>>
>> then the update code:
>>
>> q = select key from dbver where key = 'add xyz to bob';
>> if q.eof then
>>      alter table bob add xyz
>>
>>
>> -Andy
>>
>> -- 
>> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-general
> 
> 

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

Reply via email to