<?xml version="1.0" ?> 
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="http://www.postgresmigrations.com/store/4286158/index.rss.xml" rel="self" type="application/rss+xml" /> 
<pubDate>Fri, 07 Sep 2012 13:20:00 GMT</pubDate> 
<title>Bull HN Information Systems Inc</title> 
<description>Company: Bull HN Information Systems Inc</description> 
<link>http://www.postgresmigrations.com</link> 
<language>en-us</language> 
<item>
<guid>http://www.postgresmigrations.com/blog/post/3590712</guid> 
<pubDate>Fri, 07 Sep 2012 13:20:00 GMT</pubDate> 
<title>Is custom really better?</title> 
<description>Custom. Proprietary. Exclusive. All words we associate with quality and better performance – custom suits fit better, proprietary software meets our specific needs, exclusive access grants us a social edge.<br /><br />But is that always true? For vintage cars, probably. But, for an RDBMS? Not always. We put PostgreSQL 9.1 against a proprietary RDBMS and the results are in.<br /><br />Using the Open Source load test tool, Hammerora, we simulated 500 users, each performing 10,000 transactions against 800 data warehouses and measured sustained throughput.
The same platform was used for all tests and repeated multiple times (after reset) ensuring the repeatability of the results.<br /><br />So, how did PostgresSQL do? In short, consistently better. During our testing, the average Proprietary RDBMS sample showed throughput of 53824 Transactions per Minute (TPM) while PostgreSQL samples averaged 64374 TPM, - an almost 20% higher throughput.<br /><br />For the full results, (<a href="http://www.postgresmigrations.com/pdf/PostgreSQL Performance Comparison.pdf" class="bodylink">click here</a>) </description> 
<link>http://www.postgresmigrations.com/blog/post/3590712</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3581612</guid> 
<pubDate>Fri, 17 Aug 2012 18:57:23 GMT</pubDate> 
<title>Are you ready to make the MOVE?</title> 
<description>At Bull, we&#39;ve spent over 40 years providing companies just like yours with data migration services, including major data migrations from both DB2 and Oracle to PostgreSQL. Over that time, we&#39;ve helped organizations cut their costs while improving efficiency. That&#39;s why we created our latest set of products and services. <br />If you are paying high licensing and maintenance costs...<br /><br />If you are wondering how to derive maximum value from your legacy systems...<br /><br />If you want to open your enterprise data to the cloud, virtualized environments and mobile devices...<br /><br />It&#39;s time to <a href="/move-it.html">MOVE IT<sup>TM</sup></a>.<br /><br />Modernize, Optimize, Virtualize and Economize Information Technology<br /><br />Bull now offers a full range of services including database migrations, advanced transaction processing and training &amp; support. We developed MOVE IT enterprise solutions to help organizations reduce costs while opening enterprise data to cloud, mobile devices and virtualized environments.<br /><br />Our enterprise solutions specifically support:<br />Database Migrations: We can help you seamlessly migrate your legacy or other relational database to PostgreSQL, the world&#39;s most advanced open source database. Our services include consulting, implementation and optimization services for both infrastructure and applications.<br />LiberTP Transaction Processing: Our next generation transaction processor enables easy porting of older UNIX-based COBOL and C transaction processing applications to an open environment.<br />Training &amp; Support: Our support services include PostgreSQL support subscriptions; database design and build assessments; database performance and tuning services; and forms and reports migration services.<br /><br />MOVE IT products and services can work effectively standalone by solving specific challenges or work together to seamlessly provide enterprise IT clients with multiple benefits. Whether you manage work internally or outsource, MOVE IT services and software can free you from high licensing and maintenance costs while flourishing in competitive business environments.<br /><br /><a href="/contact-us.html">Contact us</a> if you&#39;d like to discuss your project in more detail, and to find out more about our database migration services and PostgreSQL offerings.</description> 
<link>http://www.postgresmigrations.com/blog/post/3581612</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3408915</guid> 
<pubDate>Fri, 20 Apr 2012 17:25:23 GMT</pubDate> 
<title>Demo version of our PL/SQL Tool Available</title> 
<description>Ken Rosensteel presented Bull&#39;s PL/SQL-to-PL/pgSQL tool at PGEast last year. Now a free public demonstration version of this tool is available. The demo tool provides a wide range of translation possibilities (but not the full tool capabilities). The user just pastes in the PL/SQL Stored Procedure text itself for a quick translation, and then the user can evaluate the results.<br /> <br /> You are welcome to try out the free demo tool at <a href="/stored-procedure-tool.html">http://www.postgresmigrations.com/stored-procedure-tool</a>, and we request your feedback. You can use the demo tool for 30 days, with a limit of 2000 lines of PL/SQL Stored Procedures.</description> 
<link>http://www.postgresmigrations.com/blog/post/3408915</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3336006</guid> 
<pubDate>Thu, 09 Feb 2012 23:10:30 GMT</pubDate> 
<title>Announcing the Arizona Postgres Users Group</title> 
<description>As mentioned in an earlier post, we&#39;re announcing the start of a PUG for Arizona. The first meeting will be Thursday, March 29, from 5 to 7 at Bull&#39;s facility in Northwest Phoenix. Refreshments will be provided.<br /> <br /> You can join and get onto the mailing list and RSVP for the first meeting at <a href="https://www.bigtent.com/groups/azpug">https://www.bigtent.com/groups/azpug</a><br /> <br /> We look forward to meeting other PostgreSQL lovers and to help grow the PostgreSQL community in our part of the world. Please feel free to pass the above link to anyone that&#39;s interested.</description> 
<link>http://www.postgresmigrations.com/blog/post/3336006</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3323648</guid> 
<pubDate>Wed, 01 Feb 2012 16:58:55 GMT</pubDate> 
<title>Why aren&#39;t more people/companies using PostgreSQL?</title> 
<description><p>Why aren&#39;t more people/companies using PostgreSQL? Why aren&#39;t they moving from proprietary databases to PostgreSQL?<br /> Possible answers: I haven&#39;t heard of PostgreSQL. I don&#39;t think PostgreSQL will meet my needs. I don&#39;t know how to get away from my database vendor.<br /> I&#39;d like to hear some of the reasons for not considering PostgreSQL when creating or migrating a database.</p></description> 
<link>http://www.postgresmigrations.com/blog/post/3323648</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3315166</guid> 
<pubDate>Thu, 26 Jan 2012 19:46:59 GMT</pubDate> 
<title>Starting an Arizona PostgreSQL Users Group</title> 
<description>We want to set up a Postgres Users group in the Arizona/Southwest area. Are you interested? We&#39;re in metro Phoenix. Any local Postgres users out there?</description> 
<link>http://www.postgresmigrations.com/blog/post/3315166</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3260608</guid> 
<pubDate>Wed, 14 Dec 2011 03:47:11 GMT</pubDate> 
<title>ISVs and PostgreSQL</title> 
<description><p><span style="font-size:11.0pt">ISVs and PostgreSQL</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">We should be seeing all ISVs (Independent Software Vendors) migrating their products to PostgreSQL. Why? Because it&#39;s one of the fastest ways to increase their ROI and decrease their current customers&#39; costs.</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">ISVs use a database in their product and typically require their customers to pay for the software license and support. Database software support is an annual expense, so customers have to pay for it, regardless of any special pricing arrangements with the database vendor.</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">So why aren&#39;t we seeing ISVs using PostgreSQL instead of proprietary databases? Some of the reasons, and our responses, follow:</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">&quot;PostgreSQL wasn&#39;t an option when we developed our software.&quot;</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">Maybe PostgreSQL wasn&#39;t an option back then; however, if your software is a viable product and you are doing updates, you should plan to include PostgreSQL. Migrating the software to use PostgreSQL - from any of the big proprietary databases such as Oracle or SQL Server - is easier than ever. With tools provided at the PostgreSQL.org site, most migrations can be done in a few days. If your software uses features like Stored Procedures to increase your database efficiency, our tools, available at <a href="http://www.postgresmigrations.com/">postgresmigrations.com</a> that are available from Postgres migrations can help migrate those expensive databases to PostgreSQL.</span></p> <p><span style="font-size:11.0pt"></span></p> <p style="margin-left:9.0pt;text-indent:-9.0pt"><span style="font-size:11.0pt"> &quot;We allow our customers to choose which proprietary database they want.&quot;</span></p> <p style="margin-left:9.0pt"><span style="font-size:11.0pt; mso-bidi-font-size:12.0pt"></span></p> <p><span style="font-size:11.0pt">Customers should be able to choose between proprietary databases and Open databases. PostgreSQL has the enterprise features that match any of the proprietary databases. Thinking of your customers&#39; bottom line and allowing them to save money on yearly licensing and support costs will enhance your reputation. </span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">&quot;The customer feels more confident in the software when paying for a proprietary database.&quot;</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">Customers will be more confident using PostgreSQL by knowing that they have options for support and that other customers are using it. In addition you can provide current customers with options for how to migrate their current proprietary database to PostgreSQL. This lets your customers know that you are their partner and are looking out for them by helping them to save money. You can provide your customers with potential migration specialists or refer them to the PostgreSQL site.</span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">For a small investment to provide PostgreSQL support in their next future release, ISVs create a significant differentiator between themselves and the competition. ISVs can build a real feeling of partnership with their current customers by providing a lower cost database alternative. </span></p> <p><span style="font-size:11.0pt"></span></p> <p><span style="font-size:11.0pt">ISVs such as Bowman Systems LLC have already done it, and companies such as VMware have it on their roadmap. What are the rest of the ISVs doing?</span></p></description> 
<link>http://www.postgresmigrations.com/blog/post/3260608</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/3167726</guid> 
<pubDate>Mon, 24 Oct 2011 16:21:32 GMT</pubDate> 
<title>Advantages of Migrating from a Proprietary Database to PostgreSQL</title> 
<description><p><span style="font-size: small;">Advantages of Migrating from a Proprietary Database to<a href="/store/4286158/page/449671582"> PostgreSQL</a></span></p> <p><span style="font-size: small;">The obvious advantage of migrating from a proprietary database to PostgreSQL is the absence of a yearly licensing fee. Regardless of what you currently pay for your licensing, it&#39;s cheaper &ndash; i.e., zero dollars - to use PostgreSQL. Also, with multiple vendors to choose from, the Maintenance cost can be substantially lower.</span></p> <p><span style="font-size: small;">Companies that foresee the potential for large savings from this type of migration can consider migrating their databases to PostgreSQL or using PostgreSQL with new projects.</span></p> <p><span style="font-size: small;"><a href="http://www.bullservices.com/vmware">VMware&#39;s</a> introduction of the<a href="http://www.vmware.com/products/datacenter-virtualization/vfabric-data-director/overview.html "> vFabric Data Director</a> makes it possible to save on the Database licensing cost, database operational costs, as well as the reduced infrastructure costs brought by consolidating with VMware.</span></p> <p><span style="font-size: small;">VMware&rsquo;s introduction of support for greater than 8 CPUs facilitates virtualization of the largest Database Servers. Very large enterprise users can now move up to extremely large servers, such as the <strong><a href="http://www.bull.com/bullion/index.php">novascale bullion from Bull</a></strong>, which can support up to 160 cores in one SMP system. Their application servers, database servers, mail server and Web Servers can run from one consolidated server, saving on multiple costs (both hardware and software). When PostgreSQL is used exclusively on these massive servers, there are no database licensing issues. That&#39;s a striking contrast to the proprietary database vendors who require licenses on all cores in the server.</span></p> <p><span style="font-size: small;"><sup></sup>With this two-pronged approach to Database cost savings, it&rsquo;s now possible to really leverage your IT dollars to get better performance and substantially lower cost.</span></p></description> 
<link>http://www.postgresmigrations.com/blog/post/3167726</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/2933246</guid> 
<pubDate>Mon, 24 Oct 2011 16:21:31 GMT</pubDate> 
<title>Converting Oracle Stored Procedures to PostgreSQL</title> 
<description><p>When considering a database migration from Oracle to Postgres, one area that requires serious deliberation is that of translating Oracle&#39;s PL/SQL source code to Postgres&#39; PL/pgSQL. It is a well documented fact that this translation can very challenging due to the proprietary nature of PL/SQL, and that the translation usually results in expensive recoding and extensive testing of the resulting procedures. It is also well understood that the functionality provided by PL/pgSQL and the semantics of the Postgres server do not necessarily behave in the same manner as the Oracle server and its PL/SQL, even in cases where the syntax is comparable. Going one step further, client code that interfaces with any translated stored database procedure will likely be largely impacted in any conversion. Given these three major issues and a myriad of other details, it is easy to understand that even though the desire is with the Oracle user community to migrate from Oracle to Postgres, the actual implementation will be a very difficult and costly task.</p> <p>This discussion is largely based on a recent Oracle to Postgres migration that we completed for a large bank in South America. We were contracted to convert a large Oracle Database to PostgreSQL. The complexity of the conversion centered largely on the need to translate approximately 50,000 lines of Oracle PL/SQL. This Stored Procedure code ranged in complexity from simple table interfaces (e.g., INSERT, UPDATE, DELETE and SELECT interfaces) to complex packages using package global arrays. A manual translation of the code was out of the question. The customer, truly following a path of unlicensed open source software, preferred not to use software providing a compatibility layer on top of PostgreSQL. After minimal analysis we determined that the existing tools, including ora2pg, were too simplistic to be of any real use. We did take advantage of the orafce functionality. But, orafce only resolved a fraction of our challenges. We needed something new that would do much more than a line by line translation. We needed a tool that could evaluate the environment and generate code required to support features such as global variables, global package records and global indexed arrays. We needed a tool that could translate complex SQL from one form to another. And we needed utility functions that would build supporting data structures that could provide information to the translator regarding function interface definitions and table definitions.</p> <p>So we developed a tool and supporting utility functions. Without this tool, the migration of our customer&#39;s functions, procedures, packages, and triggers would have been cost prohibitive and practically impossible to code and to test.</p> <p>The translations done by this tool include:</p> <p>CONNECT BY OUTER JOIN BULK COLLECT cursors client function interface rewrites including casting as required<br /> Package Global variables<br /> Package Global records<br /> Package Global binary indexed arrays<br /> Exceptions<br /> Postgres SQLSTATE to Oracle SQLCODE translation functionality<br /> Many others</p> <p>At PGEast, my talk, Large Customers Want PostgreSQL Too !, will include a discussion of this subject.</p> <p>https://www.postgresqlconference.org/content/large-customers-want-postgresql-too</p></description> 
<link>http://www.postgresmigrations.com/blog/post/2933246</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/2933210</guid> 
<pubDate>Mon, 24 Oct 2011 16:21:31 GMT</pubDate> 
<title>Large Customers Want PostgreSQL Too !</title> 
<description><p>We had an excellent attendance and a good discussion today at the PGEast Presentation</p> <p>The presentation covered experiences with large customer database conversions we have recently completed and also described a new tool that was developed to convert Oracle Stored Procedures in the form of PL/SQL to PostgreSQL PL/pgSQL</p> <p>The presentation is linked:</p> <p><a href="/files/4073772/uploaded/lcwpt.pdf"> </a><a href="/files/4286158/uploaded/Large%20Customers%20Want%20PostgreSQL%20Too%21.pdf">Large Customers Want PostgreSQL Too !!</a>Oron <a href="http://portal.sliderocket.com/ASGUZ/LCWPST">Slide Rocket</a></p></description> 
<link>http://www.postgresmigrations.com/blog/post/2933210</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/2933208</guid> 
<pubDate>Mon, 24 Oct 2011 16:21:31 GMT</pubDate> 
<title>Oracle PL/SQL CONNECT BY Translation to Postgres</title> 
<description><p>This is one of a series of blogs related to the automated conversion of PL/SQL to PL/pgSQL.</p> <p>One of the Oracle stored procedure conversion topics that we will be presenting at the PGEast conference in New York is that of CONNECT BY query translation. In this case the issue is mainly the SQL itself. In other blogs I will discuss solutions for more general topics like Oracle Packages and Global Variables.</p> <p>See our presentation: Large Customers Want PostgreSQL Too !</p> <p>https://www.postgresqlconference.org/content/large-customers-want-postgresql-too</p> <p><strong>Linked List Processing</strong></p> <p>Frequently, the PL/SQL we have translated contained SELECT statements that included the CONNECT BY option. In many cases this feature was used to identify related documents in a document table where the documents were grouped together by a singly-linked list and the CONNECT BY feature was used to traverse the list.</p> <p>To illustrate this concept consider the following table:<br /> <br /> <span style="font-family: courier;">create table songList (</span><br /> <span style="font-family: courier;">artistId int not null,</span><br /> <span style="font-family: courier;">id int not null,</span><br /> <span style="font-family: courier;">priorId int,</span><br /> <span style="font-family: courier;">title varchar2(20) );</span></p> <p>If we assign artistId of 401 to Taylor Swift, then we can map some songs from Taylor Swift&rsquo;s second album into this table starting with id 201 and begin another list which will ultimately link songs from her next album:</p> <p><span style="font-family: courier;">insert into songList values (401, 201,NULL, &lsquo;Fearless&rsquo;);</span><br /> <span style="font-family: courier;">insert into songList values (401, 202, 201, &lsquo;Fifteen&rsquo;);</span><br /> <span style="font-family: courier;">insert into songList values (401, 203, 202, &lsquo;Love Song&rsquo;);</span><br /> <span style="font-family: courier;">insert into songList values (401, 205, 203, &lsquo;White Horse&rsquo;);</span><br /> <span style="font-family: courier;">insert into songList values (401, 206, 205, &lsquo;You Belong With Me&rsquo;);</span><br /> <span style="font-family: courier;">insert into songList values (401, 301,NULL, &lsquo;unknown&rsquo;);</span></p> <p>The following Oracle CONNECT BY query could be used to list the songs in Taylor Swift&rsquo;s second album (that is the 200 series):</p> <p><span style="font-family: courier;">SELECT artistId, id, title</span><br /> <span style="font-family: courier;">FROM songList</span><br /> <span style="font-family: courier;"> WHERE artistId = 401</span><br /> <span style="font-family: courier;"> START WITH id = 201</span><br /> <span style="font-family: courier;"> CONNECT BY PRIOR id = priorId;</span></p> <p>Which generates a result of:</p> <p><span style="font-family: courier;"> ARTISTID ID TITLE</span><br /> <span style="font-family: courier;">========== ====== ====================</span><br /> <span style="font-family: courier;">401 201 Fearless</span><br /> <span style="font-family: courier;">401 202 Fifteen</span><br /> <span style="font-family: courier;">401 203 Love Song</span><br /> <span style="font-family: courier;">401 205 White Horse</span><br /> <span style="font-family: courier;">401 206 You Belong With Me</span></p> <p>To process the linked list in the same manner using Postgres one must use a Recursive query. My translation tool is capable of translating the prior Oracle CONNECT BY query into a Recursive query automatically. When the prior SELECT query is processed by my translator the following is produced:</p> <p><span style="font-family: courier;"> WITH RECURSIVE rqName (</span><br /> <span style="font-family: courier;"> artistId, id, title)</span><br /> <span style="font-family: courier;"> AS ( SELECT  == the anchor query</span><br /> <span style="font-family: courier;"> artistId,</span><br /> <span style="font-family: courier;"> id,</span><br /> <span style="font-family: courier;"> title</span><br /> <span style="font-family: courier;"> FROM</span><br /> <span style="font-family: courier;"> songList</span><br /> <span style="font-family: courier;"> WHERE</span><br /> <span style="font-family: courier;"> id = 201</span><br /> <span style="font-family: courier;"> UNION ALL</span><br /> <span style="font-family: courier;"> SELECT  == the recursive query</span><br /> <span style="font-family: courier;"> tn.artistId,</span><br /> <span style="font-family: courier;">  tn.id,</span><br /> <span style="font-family: courier;"> tn.title</span><br /> <span style="font-family: courier;"> FROM</span><br /> <span style="font-family: courier;"> rqName tp, songList tn</span><br /> <span style="font-family: courier;"> WHERE</span><br /> <span style="font-family: courier;"> tp.id = tn.priorId</span><br /> <span style="font-family: courier;"> )</span><br /> <span style="font-family: courier;"> SELECT artistId, id, title</span><br /> <span style="font-family: courier;"> FROM rqName</span><br /> <span style="font-family: courier;"> WHERE artistId = 401;</span></p> <p>The anchor query is responsible for finding the START WITH row. The recursive query then UNIONs its results which are dependent upon the join between the most recent result&rsquo;s id (tp.id) and the current song&rsquo;s link field (tn.priorId). The query interates through the list of ids until it encounters the id of 301 which does not have a priorId.</p> <p>The restriction artistId = 401 could be added to the anchor query. I have found through experimentation that Postgres&rsquo; performance is improved when written in the described manner. This improvement, noted by using EXPLAIN ANALYZE is significant when a lot of data is involved.</p> <p><strong>Tree Hierarchy Processing</strong></p> <p>The prior recursive query as coded was sufficient to process one hierarchy because of the singly-linked list. A common requirement is that more than one hierarchy, or multiple branches of a tree, must be processed. My translator can make the Recursive query code modifications required to support this for Postgres optionally.</p> <p>For example, consider the manager / employee relationships in the emp table of the Oracle demo database.</p> <p><span style="font-family: courier;">select ename, empno, mgr from emp;</span></p> <p><span style="font-family: courier;">ENAMEEMPNOMGR</span><br /> <span style="font-family: courier;">==========================</span><br /> <span style="font-family: courier;">SMITH73697902</span><br /> <span style="font-family: courier;">ALLEN74997698</span><br /> <span style="font-family: courier;">WARD75217698</span><br /> <span style="font-family: courier;">JONES75667839</span><br /> <span style="font-family: courier;">MARTIN76547698</span><br /> <span style="font-family: courier;">BLAKE76987839</span><br /> <span style="font-family: courier;">CLARK77827839</span><br /> <span style="font-family: courier;">SCOTT77887566</span><br /> <span style="font-family: courier;">KING7839</span><br /> <span style="font-family: courier;">TURNER78447698</span><br /> <span style="font-family: courier;">ADAMS78767788</span><br /> <span style="font-family: courier;">JAMES79007698</span><br /> <span style="font-family: courier;">FORD79027566</span><br /> <span style="font-family: courier;">MILLER79347782</span></p> <p>One can use an Oracle CONNECT BY to generate the manager to employee hierarchy:</p> <p><span style="font-family: courier;">SELECT ename, empno, mgr FROM emp</span><br /> <span style="font-family: courier;">START WITH mgr IS NULL</span><br /> <span style="font-family: courier;">CONNECT BY PRIOR empno = mgr;</span><br /> <br /> <span style="font-family: courier;">ENAMEEMPNOMGR</span><br /> <span style="font-family: courier;">==========================</span><br /> <span style="font-family: courier;">KING7839</span><br /> <span style="font-family: courier;">JONES75667839</span><br /> <span style="font-family: courier;">SCOTT77887566</span><br /> <span style="font-family: courier;">ADAMS78767788</span><br /> <span style="font-family: courier;">FORD79027566</span><br /> <span style="font-family: courier;">SMITH73697902</span><br /> <span style="font-family: courier;">BLAKE76987839</span><br /> <span style="font-family: courier;">ALLEN74997698</span><br /> <span style="font-family: courier;">WARD75217698</span><br /> <span style="font-family: courier;">MARTIN76547698</span><br /> <span style="font-family: courier;">TURNER78447698</span><br /> <span style="font-family: courier;">JAMES79007698</span><br /> <span style="font-family: courier;">CLARK77827839</span><br /> <span style="font-family: courier;">MILLER79347782</span><br /> <br /> The equivalent Recursive query produced from the Oracle CONNECT BY query using my translator with the hierarchy option enabled is:</p> <p><span style="font-family: courier;">WITH RECURSIVE rqName (</span><br /> <span style="font-family: courier;">ename, empno, mgr, arrHierarchy)</span><br /> <span style="font-family: courier;">AS ( SELECT == the anchor query</span><br /> <span style="font-family: courier;">ename,</span><br /> <span style="font-family: courier;">empno,</span><br /> <span style="font-family: courier;">mgr,</span><br /> <span style="font-family: courier;">ARRAY[coalesce(empno,0)]== array for perserving the</span><br /> <span style="font-family: courier;">FROM</span><br /> <span style="font-family: courier;">emp</span><br /> <span style="font-family: courier;">WHERE</span><br /> <span style="font-family: courier;">mgr IS NULL</span><br /> <span style="font-family: courier;">UNION ALL</span><br /> <span style="font-family: courier;">SELECT  == the recursive query</span><br /> <span style="font-family: courier;">tn.ename,</span><br /> <span style="font-family: courier;">tn.empno,</span><br /> <span style="font-family: courier;">tn.mgr,</span><br /> <span style="font-family: courier;">arrHierarchy || tn.empno== append to perserve the hierarchy</span><br /> <span style="font-family: courier;">FROM</span><br /> <span style="font-family: courier;">rqName tp, emp tn</span><br /> <span style="font-family: courier;">WHERE</span><br /> <span style="font-family: courier;">tp.empno = tn.mgr</span><br /> <span style="font-family: courier;">)</span><br /> <span style="font-family: courier;">SELECT ename, empno, mgr</span><br /> <span style="font-family: courier;">FROM rqName</span><br /> <span style="font-family: courier;">ORDER BY arrHierarchy;</span><br /> <br /> The results for this query are identical to that of the Oracle CONNECT BY.</p> <p>The key to processing branches of the tree hierarchy is to capture the &ldquo;path&rdquo; in the array named arrHierarchy then sort the results based on this path. The path was accumulated in the array using the concat operator in the code:</p> <p>arrHierarchy || tn.empno</p> <p><strong>Path Display</strong></p> <p>The path will be displayed if the Oracle function SYS_CONNECT_BY_PATH is referenced in the SELECT list. The means that the array arrHierarchy will be available and probably should be cast to VARCHAR.</p> <p><strong>Level Emulation</strong></p> <p>My translator also can customize the Recursive query to display the equivalent to the Oracle LEVEL pseudo column when the SELECT list includes the Oracle LEVEL keyword. The following is the code generated for the query that evaluates the emp table when LEVEL is selected for Oracle:</p> <p><span style="font-family: courier;">SELECT ename, empno, mgr, LEVEL FROM emp</span><br /> <span style="font-family: courier;">START WITH mgr IS NULL</span><br /> <span style="font-family: courier;">CONNECT BY PRIOR empno = mgr;</span><br /> <br /> <span style="font-family: courier;">ENAMEEMPNOMGRLEVEL</span><br /> <span style="font-family: courier;">================================</span><br /> <span style="font-family: courier;">KING78391</span><br /> <span style="font-family: courier;">JONES756678392</span><br /> <span style="font-family: courier;">SCOTT778875663</span><br /> <span style="font-family: courier;">ADAMS787677884</span><br /> <span style="font-family: courier;">FORD790275663</span><br /> <span style="font-family: courier;">SMITH736979024</span><br /> <span style="font-family: courier;">BLAKE769878392</span><br /> <span style="font-family: courier;">ALLEN749976983</span><br /> <span style="font-family: courier;">WARD752176983</span><br /> <span style="font-family: courier;">MARTIN765476983</span><br /> <span style="font-family: courier;">TURNER784476983</span><br /> <span style="font-family: courier;">JAMES790076983</span><br /> <span style="font-family: courier;">CLARK778278392</span><br /> <span style="font-family: courier;">MILLER793477823</span><br /> <br /> The translation of the prior query with the LEVEL specification follows:</p> <p><span style="font-family: courier;">WITH RECURSIVE rqName (</span><br /> <span style="font-family: courier;">ename, empno, mgr, LEVEL, arrHierarchy)</span><br /> <span style="font-family: courier;">AS ( SELECT  == the anchor query</span><br /> <span style="font-family: courier;">ename,</span><br /> <span style="font-family: courier;">empno,</span><br /> <span style="font-family: courier;">mgr,</span><br /> <span style="font-family: courier;">1,</span><br /> <span style="font-family: courier;">ARRAY[coalesce(empno,0)]== array for perserving the hierarchy order</span><br /> <span style="font-family: courier;">FROM</span><br /> <span style="font-family: courier;">emp</span><br /> <span style="font-family: courier;">WHERE</span><br /> <span style="font-family: courier;">mgr IS NULL</span><br /> <span style="font-family: courier;">UNION ALL</span><br /> <span style="font-family: courier;">SELECT  == the recursive query</span><br /> <span style="font-family: courier;">tn.ename,</span><br /> <span style="font-family: courier;">tn.empno,</span><br /> <span style="font-family: courier;">tn.mgr,</span><br /> <span style="font-family: courier;">tp.LEVEL + 1,</span><br /> <span style="font-family: courier;">arrHierarchy || tn.empno== append to perserve the hierarchy</span><br /> <span style="font-family: courier;">FROM</span><br /> <span style="font-family: courier;">rqName tp, emp tn</span><br /> <span style="font-family: courier;">WHERE</span><br /> <span style="font-family: courier;">tp.empno = tn.mgr</span><br /> <span style="font-family: courier;">)</span><br /> <span style="font-family: courier;">SELECT ename, empno, mgr, LEVEL</span><br /> <span style="font-family: courier;">FROM rqName</span><br /> <span style="font-family: courier;">ORDER BY arrHierarchy;</span><br /> <br /> <strong>Conclusion</strong></p> <p>Rewriting CONNECT BY queries can be a very challenging task to perform by hand. My translation tool can relieve much of the work involved for most of the forms of CONNECT BY that we have encountered. There can be some forms that require special hand recoding such as CONNECT BYs in a subquery (because Postgres does not support recursive queries in a subquery). Nevertheless, the Oracle CONNECT BY needn&rsquo;t be viewed as an insurmountable hurdle when considering a PL/SQL to PL/pgSQL migration.</p></description> 
<link>http://www.postgresmigrations.com/blog/post/2933208</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/64</guid> 
<pubDate>Mon, 24 Oct 2011 16:21:31 GMT</pubDate> 
<title>The Death of Predatory Pricing</title> 
<description><h2>Why an open source database is good for business</h2> <p>Annual payments to the DBMS vendor shouldn&rsquo;t make up the largest portion of your yearly IT expenditures. Your staff is trained, your applications run fine, now is the time to embrace the growing IT business trend and make use of &ldquo;Open Source&rdquo; software.</p> <h2>The Enterprise State of Open Source Today</h2> <p>Open source software has progressed significantly from the days when you had to roll-your-own, download it from a website, compile, and hope it worked. There was no real support and the opportunity to run enterprise class applications was largely non-existent.</p> <p>But those days are gone. Today we have powerful enterprise class tools like: Linux (Red Hat), JAVA, Apache, JBOSS and many others. These products are still available to download; but, they have world-class support companies that stand behind them with the knowledge and the scale to support enterprise offerings at prices that are significantly lower than industry standards for equivalent functionality.</p> <h2>PostgreSQL the Enterprise, Open Source Database</h2> <p>PostgreSQL is &ldquo;the world&rsquo;s most advanced open source database&rdquo; with a feature set that rivals products like Oracle. At Bull we have been managing customer enterprise scale database installations for the past 40 years. We have made a lifetime career of helping Fortune 500 companies integrate their various DBMS systems and convert from one DBMS to the next. For the past 20 years the emphasis has been integrating the data of the enterprise to UNIX then Linux systems: Oracle, Ingres, Informix, DB2, Windows SQL Server and a variety of other DBMS systems. For the past 10 years PostgreSQL has been the new target of integration.</p> <p>Designed in Silicon Valley (at Cal Berkeley) where Oracle, Sybase, SQL Server and many others originated, Postgres has derived its feature set from 20 years of competition and development with the &ldquo;Big Three&rdquo; (Oracle, DB2 and SQL Server). I can tell you that Postgres is just as feature capable as any of the &ldquo;Big Three&rdquo; and nearly as performant. Combine it&rsquo;s open source nature and you have an enterprise scale product that makes a lot of fiscal sense and puts a death sentence on predatory pricing practices.</p> <p>At Bull, we help major companies convert from their expensive, proprietary databases to powerful open alternatives. I have participated in quite a few conversion projects over the years and have yet to see an open database install that didn&rsquo;t meet the demands of the project specification on Linux/UNIX, Windows or mainframes.</p> <p>If you are interested in learning more about Postgres take a look at their website:<br /> <a href="http://www.postgresql.org/">www.postgresql.org</a></p> <p>If you would like to see the kind of success customers have when Bull migrates them from their proprietary database then take a look here:<br /> <a href="/store/4286158/data-migration-success-stories">Bull modernizes CNAF&rsquo;s core business applications</a></p></description> 
<link>http://www.postgresmigrations.com/blog/post/64</link> 
</item>
<item>
<guid>http://www.postgresmigrations.com/blog/post/2933206</guid> 
<pubDate>Mon, 24 Oct 2011 16:21:31 GMT</pubDate> 
<title>Who Uses PostgreSQL</title> 
<description><p>When considering a new database system or any new software system that will become a cornerstone of your IT, you have to ask &quot;Who else uses this system and what do they think about the product&#39;. This is especially true of an Open Source product. Because there is no vendor standing to make millions from the sale of the software, you will not see Super Bowl ads touting Free Software and there is no Marketing team providing glossy brochures. So how do you find the other major users of Open Source Software.</p> <p>In the case of PostgreSQL we have first hand knowledge of customers that we have helped to make the switch to Postgres. But there are other sources that are readily available. Easiest to read about are on line testimonials (http://www.postgresql.org/about/quotesarchive):</p> <p>Skype, We have been using PostgreSQL as the main DB for most of our business needs right from the start.</p> <p>City of Garden Grove, I can&#39;t say enough good things about PostgreSQL. From backups to application development to administration, PostgreSQL has been a joy to work with.</p> <p>Some of the more recognizable Postgres Users:</p> <p>- Sony<br /> - Vonage<br /> - FTD Florists<br /> - Nippon Telephone and Telegraph, Japan&#39;s largest telecommunications company</p> <p>The Postgres community sponsors multiple conferences on the East Coast and West Coast of the U.S.<br /> Some recent presentations:</p> <p>Skype: runs their entire business on Postgres.</p> <p>Federal Aviation Authority (FAA): are mapping all US airfields and<br /> their landmarks/beacons etc, using PostGIS on Postgres. Also, they<br /> have/are moving the NOTAM (Notice To Airmen) alerting system to<br /> Postgres. Both systems have obvious reliability requirements.</p> <p>MyYearbook.com is a very large US based social networking site that<br /> uses Postgres to support millions of users.</p> <p>Enova Financial: Managed over $1 billion in loans with Postgres last year alone.</p> <p>Wisconsin Court Systems executes about 80 million database transactions against about 100 databases distributed around the state.</p> <p>In our experience we have helped two very large organizations move their data and applications to PostgreSQL:</p> <p>CNAF, One of France&#39;s largest social service organizations have moved their largest Batch and OLTP applications to Postgres and run 1 Billion SQL statements per day. http://www.bullservices.com/data-migration-postgresql/postgresql-success-stories/</p> <p>In Brazil, we have converted the check processing for Brazil&#39;s largest banks Caixa Bank and Banco do Brasil from Oracle to Postgres.</p> <p>So there are many examples to choose from... what&#39;s holding your organization back from starting on the Open Source road using PostgreSQL?</p> <p>Ken.Rosensteel@Bull.com</p> <p><em>The ideas, opinions, recommendations and views expressed in this message are strictly my own and in no way commit or represent those of Bull HN as my employer or Bull HN&#39;s Internet provider.</em></p></description> 
<link>http://www.postgresmigrations.com/blog/post/2933206</link> 
</item>
  </channel>
  </rss>