Re: How do you version your database?
Amit Aronovitch <[email protected]> Mon, 09 May 2011 00:14:50 +0300
| Newsgroups | gmane.culture.hackers.israel |
|---|---|
| Message-ID | <[email protected]> |
--------------030409000006060902000800 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 08/05/2011 14:50, Arik Baratz wrote: > > On Sat, May 7, 2011 at 8:30 PM, Amit Aronovitch <[email protected] > <mailto:[email protected]>> wrote: > > > OK for the schema, but what about the actual data? > > > Our script loaded the data as well :) If you start from a new database > and run the script you would end up with the up-to-date schema loaded > with all of the default values etc. All this was maintained by our DBA. > > Maybe it is not the most efficient way to do it but it worked for us. > > You need a script for upgrading the data, at least from each > production release to the next one. And given a db-dump, you > should be able to know which version it belongs to, so you know > which script to run. > I think it would be best to store some date/version stamp in some > table, so you'd never lose track of which schema/code is relevant > for the data (once you have that, you can automate and have the > upgrade-scripts use this stamp). > > > > I think what you are talking about is different - a web application or > something similar that holds production data. > Right. I was thinking of SAS where the database holds the customers' valuable data. But this is also relevant for installable software, where you want the user to have an easy way to upgrade the software without losing the data he already fed into the system and without having to manually select scripts to run according to version. I guess if you have a backup feature that packages other stuff along with the db dump, the version info could be stored outside the dump (still it seems safer to keep the version in the db itself, to avoid dealing with file formats etc.) > What I was referring to was a product that was using a database and > the programming environments that we created for that. We had no need > to version live data on our database. > I see. It remains to see which case the OP had ment. :-) AA --------------030409000006060902000800 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> </head> <body style="background-color: #fff;"> <span style="display:none"> </span> <!--~-|**|PrettyHtmlStartT|**|-~--> <div id="ygrp-mlmsg" style="position:relative;"> <div id="ygrp-msg" style="z-index: 1;"> <!--~-|**|PrettyHtmlEndT|**|-~--> <div id="ygrp-text" > <p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <p>On 08/05/2011 14:50, Arik Baratz wrote:<br> </p> <blockquote cite="mid:BANLkTinN5MqA9YJL=hfjoAXWw3EgAiE8cQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org" type="cite"> <!-- |**|begin egp html banner|**| --> <br> <div dir="ltr"> <div class="gmail_quote">On Sat, May 7, 2011 at 8:30 PM, Amit Aronovitch <span dir="ltr"><<a moz="true" href="mailto:[email protected]">[email protected]</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204);"> <div> <div dir="ltr"> <div class="gmail_quote"> <div> <br> OK for the schema, but what about the actual data?<br> <br> </div> </div> </div> </div> </blockquote> <div><br> </div> <div>Our script loaded the data as well :) If you start from a new database and run the script you would end up with the up-to-date schema loaded with all of the default values etc. All this was maintained by our DBA.</div> <div><br> </div> <div>Maybe it is not the most efficient way to do it but it worked for us.</div> <div> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204);"> <div> <div dir="ltr"> <div class="gmail_quote"> <div>You need a script for upgrading the data, at least from each production release to the next one. And given a db-dump, you should be able to know which version it belongs to, so you know which script to run.<br> I think it would be best to store some date/version stamp in some table, so you'd never lose track of which schema/code is relevant for the data (once you have that, you can automate and have the upgrade-scripts use this stamp).<br> </div> </div> </div> </div> </blockquote> <div><br> </div> <div><br> </div> <div>I think what you are talking about is different - a web application or something similar that holds production data.</div> <div><br> </div> </div> </div> </blockquote> <br> Right. I was thinking of SAS where the database holds the customers' valuable data.<br> But this is also relevant for installable software, where you want the user to have an easy way to upgrade the software without losing the data he already fed into the system and without having to manually select scripts to run according to version. <br> I guess if you have a backup feature that packages other stuff along with the db dump, the version info could be stored outside the dump (still it seems safer to keep the version in the db itself, to avoid dealing with file formats etc.)<br> <br> <blockquote cite="mid:BANLkTinN5MqA9YJL=hfjoAXWw3EgAiE8cQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org" type="cite"> <div dir="ltr"> <div class="gmail_quote"> <div>What I was referring to was a product that was using a database and the programming environments that we created for that. We had no need to version live data on our database.</div> <div><br> </div> </div> </div> </blockquote> <br> I see. It remains to see which case the OP had ment. :-)<br> <br> AA<br> <br> </p> </div> <!--~-|**|PrettyHtmlStart|**|-~--> <div style="color: #fff; height: 0;">__._,_.___</div> <div id="ygrp-actbar" style="clear: both; margin-bottom: 10px; white-space: nowrap; color: #666; padding-top: 15px;"> <div> <a href="mailto:[email protected]?subject=Re%3A%20%5Bhackers-il%5D%20How%20do%20you%20version%20your%20database%3F" style="margin-right: 0; padding-right: 0;"> Reply to <span style="font-weight: 700;">sender</span></a> | <a href="mailto:[email protected]?subject=Re%3A%20%5Bhackers-il%5D%20How%20do%20you%20version%20your%20database%3F"> Reply to <span style="font-weight: 700;">group</span></a> | <a href="http://groups.yahoo.com/group/hackers-il/post;_ylc=X3oDMTJwN3AxNTdiBF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUxNjAEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxMzA0OTQ3MTc3?act=reply&messageNum=5160">Reply <span style="font-weight: 700;">via web post</span></a> | <a href="http://groups.yahoo.com/group/hackers-il/post;_ylc=X3oDMTJlYmNvZnI2BF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTMwNDk0NzE3Nw--" style="font-weight: 700;">Start a New Topic</a> </div> <a href="http://groups.yahoo.com/group/hackers-il/message/5156;_ylc=X3oDMTM0Nm5rMXE1BF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzUxNjAEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxMzA0OTQ3MTc3BHRwY0lkAzUxNTY-">Messages in this topic</a> (<span style="font-weight: 700;">5</span>) </div> <!------- Start Nav Bar ------> <!-- |**|begin egp html banner|**| --> <div id="ygrp-vital" style="background-color: #e0ecee; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;"> <span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; ">Recent Activity:</span> <ul style="list-style-type: none; margin: 0; padding: 0; display: inline;"> <li style="border-right: 1px solid #000; font-weight: 700; display: inline; padding: 0 5px; margin-left: 0;"> <span class="cat"><a href="http://groups.yahoo.com/group/hackers-il/members;_ylc=X3oDMTJmMzRrNW00BF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEzMDQ5NDcxNzc-?o=6" style="text-decoration: none;">New Members</a></span> <span class="ct" style="color: #ff7900;">1</span> </li> </ul> <div style="clear: both; padding-top: 2px; color: #1e66ae;"> <a href="http://groups.yahoo.com/group/hackers-il;_ylc=X3oDMTJlOWRzdGdjBF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTMwNDk0NzE3Nw--" style="text-decoration: none;">Visit Your Group</a> </div> </div> <div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;"> <a href="http://groups.yahoo.com/;_ylc=X3oDMTJkZ2Z2ZjdvBF9TAzk3NDc2NTkwBGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMzA0OTQ3MTc3" style="float: left;"><img src="http://l.yimg.com/a/i/us/yg/logo/us.gif" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a> <div style="color: #747575; float: right;">Switch to: <a href="mailto:[email protected]?subject=Change Delivery Format: Traditional" style="text-decoration: none;">Text-Only</a>, <a href="mailto:[email protected]?subject=Email Delivery: Digest" class="margin-rt" style="text-decoration: none;">Daily Digest</a> • <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> • <a href="http://docs.yahoo.com/info/terms/" style="text-decoration: none;">Terms of Use</a></div> </div> <!-- |**|end egp html banner|**| --> </div> <!-- ygrp-msg --> <!-- Sponsor --> <!-- |**|begin egp html banner|**| --> <div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;"> <!-- Start Recommendations --> <div id="ygrp-reco"> </div> <!-- End Recommendations --> </div> <!-- |**|end egp html banner|**| --> <div style="clear:both; color: #FFF; font-size:1px;">.</div> </div> <img src="http://geo.yahoo.com/serv?s=97359714/grpId=1857332/grpspId=1705006764/msgId=5160/stime=1304947177/nc1=1/nc2=2/nc3=3" width="1" height="1"> <br> <div style="color: #fff; height: 0;">__,_._,___</div> <!--~-|**|PrettyHtmlEnd|**|-~--> </body> <!--~-|**|PrettyHtmlStart|**|-~--> <head> <style type="text/css"> <!-- #ygrp-mkp { border: 1px solid #d8d8d8; font-family: Arial; margin: 10px 0; padding: 0 10px; } #ygrp-mkp hr { border: 1px solid #d8d8d8; } #ygrp-mkp #hd { color: #628c2a; font-size: 85%; font-weight: 700; line-height: 122%; margin: 10px 0; } #ygrp-mkp #ads { margin-bottom: 10px; } #ygrp-mkp .ad { padding: 0 0; } #ygrp-mkp .ad p { margin: 0; } #ygrp-mkp .ad a { color: #0000ff; text-decoration: none; } #ygrp-sponsor #ygrp-lc { font-family: Arial; } #ygrp-sponsor #ygrp-lc #hd { margin: 10px 0px; font-weight: 700; font-size: 78%; line-height: 122%; } #ygrp-sponsor #ygrp-lc .ad { margin-bottom: 10px; padding: 0 0; } a { color: #1e66ae; } #actions { font-family: Verdana; font-size: 11px; padding: 10px 0; } #activity { background-color: #e0ecee; float: left; font-family: Verdana; font-size: 10px; padding: 10px; } #activity span { font-weight: 700; } #activity span:first-child { text-transform: uppercase; } #activity span a { color: #5085b6; text-decoration: none; } #activity span span { color: #ff7900; } #activity span .underline { text-decoration: underline; } .attach { clear: both; display: table; font-family: Arial; font-size: 12px; padding: 10px 0; width: 400px; } .attach div a { text-decoration: none; } .attach img { border: none; padding-right: 5px; } .attach label { display: block; margin-bottom: 5px; } .attach label a { text-decoration: none; } blockquote { margin: 0 0 0 4px; } .bold { font-family: Arial; font-size: 13px; font-weight: 700; } .bold a { text-decoration: none; } dd.last p a { font-family: Verdana; font-weight: 700; } dd.last p span { margin-right: 10px; font-family: Verdana; font-weight: 700; } dd.last p span.yshortcuts { margin-right: 0; } div.attach-table div div a { text-decoration: none; } div.attach-table { width: 400px; } div.file-title a, div.file-title a:active, div.file-title a:hover, div.file-title a:visited { text-decoration: none; } div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div.photo-title a:visited { text-decoration: none; } div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts { font-family: Verdana; font-size: 10px; font-weight: normal; } .green { color: #628c2a; } .MsoNormal { margin: 0 0 0 0; } o { font-size: 0; } #photos div { float: left; width: 72px; } #photos div div { border: 1px solid #666666; height: 62px; overflow: hidden; width: 62px; } #photos div label { color: #666666; font-size: 10px; overflow: hidden; text-align: center; white-space: nowrap; width: 64px; } #reco-category { font-size: 77%; } #reco-desc { font-size: 77%; } .replbq { margin: 4px; } #ygrp-actbar div a:first-child { /* border-right: 0px solid #000;*/ margin-right: 2px; padding-right: 5px; } #ygrp-mlmsg { font-size: 13px; font-family: Arial, helvetica,clean, sans-serif; *font-size: small; *font: x-small; } #ygrp-mlmsg table { font-size: inherit; font: 100%; } #ygrp-mlmsg select, input, textarea { font: 99% Arial, Helvetica, clean, sans-serif; } #ygrp-mlmsg pre, code { font:115% monospace; *font-size:100%; } #ygrp-mlmsg * { line-height: 1.22em; } #ygrp-mlmsg #logo { padding-bottom: 10px; } #ygrp-mlmsg a { color: #1E66AE; } #ygrp-msg p a { font-family: Verdana; } #ygrp-msg p#attach-count span { color: #1E66AE; font-weight: 700; } #ygrp-reco #reco-head { color: #ff7900; font-weight: 700; } #ygrp-reco { margin-bottom: 20px; padding: 0px; } #ygrp-sponsor #ov li a { font-size: 130%; text-decoration: none; } #ygrp-sponsor #ov li { font-size: 77%; list-style-type: square; padding: 6px 0; } #ygrp-sponsor #ov ul { margin: 0; padding: 0 0 0 8px; } #ygrp-text { font-family: Georgia; } #ygrp-text p { margin: 0 0 1em 0; } #ygrp-text tt { font-size: 120%; } #ygrp-vital ul li:last-child { border-right: none !important; } --> </style> </head> <!--~-|**|PrettyHtmlEnd|**|-~--> </html> <!-- end group email --> --------------030409000006060902000800--