<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9053536529694784563</id><updated>2011-08-19T21:41:59.374-07:00</updated><category term='PostgreSQL'/><title type='text'>Database Explorer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-6024317197718591236</id><published>2011-08-17T14:57:00.000-07:00</published><updated>2011-08-17T15:10:12.077-07:00</updated><title type='text'>R is for Innovation</title><content type='html'>I'm pleased to note that Teradata just announced a plugin for the R language.&lt;br /&gt;&lt;br /&gt;As many of you will know, PostgreSQL has supported server functions written in the R language for many years. So its good that Teradata has seen the light at last and by doing so has validated the innovations that PostgreSQL has made.&lt;br /&gt;&lt;br /&gt;That means the list of databases that have responded directly to innovations in PostgreSQL, now extends to Oracle, Informix(Illustra), SQLServer, Sybase, DB2, Teradata. Of course, MySQL have been trying to catch up for a long time,&lt;br /&gt;&lt;br /&gt;That pretty much is the complete set. Cool. Well, almost.&lt;br /&gt;&lt;br /&gt;I'm intrigued as to what NoSQL vendors think will happen next. If their core values are simplicity then what new features can they add without going back on their core philosophy. Austerity isn't something you can have more of, is it? Let's wait and see what happens when the VC runs out.&lt;br /&gt;&lt;br /&gt;PostgreSQL really is in a leadership position with regards to database innovation. And I'm happier than ever to be part of this phenomenon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-6024317197718591236?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/6024317197718591236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/08/r-is-for-innovation.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6024317197718591236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6024317197718591236'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/08/r-is-for-innovation.html' title='R is for Innovation'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-717625547131549603</id><published>2011-07-19T08:25:00.000-07:00</published><updated>2011-07-19T08:45:00.096-07:00</updated><title type='text'>Cascading Replication</title><content type='html'>Cascading Replication is now part of PostgreSQL 9.2, thanks to Fujii Masao.&lt;br /&gt;&lt;br /&gt;The idea is that a streaming replication standby can also stream data onto other standbys. This allows a complex network of interrelated servers to fulfil the roles of High Availability, High Durability, Distributed data access capacity and Reporting requirements.&lt;br /&gt;&lt;br /&gt;You can set up chained configurations like A -&gt; B -&gt; C.&lt;br /&gt;&lt;br /&gt;or more complex arrangements like&lt;br /&gt;......A&lt;br /&gt;....B....E&lt;br /&gt;..C.D...F.G&lt;br /&gt;&lt;br /&gt;This should make it much easier to reduce bandwidth for intercontinental replication.&lt;br /&gt;&lt;br /&gt;Nice thing is that Hot Standby feedback works across the whole cluster, so you easily manage the interrelationships between servers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-717625547131549603?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/717625547131549603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/07/cascading-replication.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/717625547131549603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/717625547131549603'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/07/cascading-replication.html' title='Cascading Replication'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-2548430644592423309</id><published>2011-07-19T08:12:00.001-07:00</published><updated>2011-07-19T08:25:05.784-07:00</updated><title type='text'>CHAR(11) Conference Success</title><content type='html'>Finally recovered from attending CHAR(11) in Cambridge, UK. 2 complete days of Clustering, High Availability and Replication talks from various experts.&lt;br /&gt;&lt;br /&gt;We had 15 talks from 14 speakers from US, Japan and from 8 European countries, including the keynote from Jan Wieck. Attendees came from US and all across Europe, many of whom could give detailed talks themselves. There's always next year...&lt;br /&gt;&lt;br /&gt;The most amazing thing were the comments we received from attendees. Every talk was packed solid, and judging by the seats alone it seems almost everybody went to all the talks - for the whole talk. I don't recall a conference having such a good attendee rate, not even CHAR(10) last year.&lt;br /&gt;&lt;br /&gt;Based on that, it looks pretty certain that we'll run CHAR(12) next year. We did discuss Japan for CHAR(12) but that's not going to be as easy as we'd hoped. Let's see how that goes.&lt;br /&gt;&lt;br /&gt;I'm pleased with how everything ran, so a big thanks to the organising team.&lt;br /&gt;&lt;br /&gt;Thanks very much to Koichi Suzuki for visiting again. The panel discussion between Postgres-XC, MGRID and Greenplum was very enlightening.&lt;br /&gt;&lt;br /&gt;Thanks to all the speakers and attendees also.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-2548430644592423309?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/2548430644592423309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/07/char11-conference-success.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/2548430644592423309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/2548430644592423309'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/07/char11-conference-success.html' title='CHAR(11) Conference Success'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-6801047867136423532</id><published>2011-06-16T03:18:00.000-07:00</published><updated>2011-06-16T03:46:53.314-07:00</updated><title type='text'>Five Nines</title><content type='html'>In High Availability we talk about "Five Nines" meaning 99.999% availability. I like to joke that a badly configured system has "Nine Fives" availability or 55.555555% availability.&lt;br /&gt;&lt;br /&gt;With a sensible architecture and good operational controls, data can be made "Five Nines" safe with PostgreSQL 9.1.&lt;br /&gt;&lt;br /&gt;I was reminded today that "Five Nines" had another meaning in an earlier age. Wilfrid Owen's wartime poetry describes &lt;br /&gt;&lt;br /&gt;And towards our distant rest began to trudge. &lt;br /&gt;Men marched asleep. Many had lost their boots&lt;br /&gt;But limped on, blood-shod. All went lame; all blind;&lt;br /&gt;Drunk with fatigue; deaf even to the hoots&lt;br /&gt;Of tired, outstripped Five-Nines that dropped behind.&lt;br /&gt;&lt;br /&gt;meaning artillery shells falling away from the target of the front line troops.&lt;br /&gt;&lt;br /&gt;The poem ends with an exhortation to learn from earlier mistakes&lt;br /&gt;&lt;br /&gt;My friend, you would not tell with such high zest&lt;br /&gt;To children ardent for some desperate glory,&lt;br /&gt;The old Lie: Dulce et decorum est&lt;br /&gt;Pro patria mori.&lt;br /&gt;&lt;br /&gt;"How sweet and fitting it is to die for one's country"&lt;br /&gt;&lt;br /&gt;I'm sure there's a modern message there, but I'll leave that up to you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-6801047867136423532?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/6801047867136423532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/06/five-nines.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6801047867136423532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6801047867136423532'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/06/five-nines.html' title='Five Nines'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-5016968950771797664</id><published>2011-05-04T03:03:00.000-07:00</published><updated>2011-05-04T03:21:10.961-07:00</updated><title type='text'>Gentlemen, Start your Engines</title><content type='html'>The racing season is upon us. We have both the Le Mans 24 hour race and the Indy 500 coming in the next month, both long distance, high speed motor racing events.&lt;br /&gt;http://www.indianapolismotorspeedway.com/indy500/&lt;br /&gt;http://www.lemans.org/&lt;br /&gt;&lt;br /&gt;We also have the beta of PostgreSQL 9.1 and associated tools.&lt;br /&gt;&lt;br /&gt;Just like motor sport, a 5 minute engine test proves very little. Only good solid usage at high levels of performance will prove whether the engine is good enough to be world class.&lt;br /&gt;&lt;br /&gt;Just like a race, we have deadlines and we must remember we aren't the only people in the world producing database software. The deadline is more important this year because we are attempting to cut the time of the beta cycle down by weeks and months.&lt;br /&gt;&lt;br /&gt;The PostgreSQL project needs you to start your engines. Start testing PostgreSQL 9.1 as soon as possible and take it to the very limits of durability and performance.&lt;br /&gt;&lt;br /&gt;Make the tests run for 500 miles and/or 24 hours. Report the results, in detail.&lt;br /&gt;&lt;br /&gt;Do it. Do it &lt;span style="font-style:italic;"&gt;now&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-5016968950771797664?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/5016968950771797664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/05/gentlemen-start-your-engines.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/5016968950771797664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/5016968950771797664'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/05/gentlemen-start-your-engines.html' title='Gentlemen, Start your Engines'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-828048062692121426</id><published>2011-04-28T10:00:00.000-07:00</published><updated>2011-04-28T10:53:30.885-07:00</updated><title type='text'>Brand New Kayak</title><content type='html'>I've just bought a new Dagger GT max kayak on eBay, just collected it today.&lt;br /&gt;&lt;br /&gt;It's shorter than my old Mountain Bat, with a flat bottom for surfing and rivers, and tramlines to allow you edge through turns better. Lots of padding and a back rest that actually works. And its bright yellow.&lt;br /&gt;&lt;br /&gt;Like most things, it makes me think about databases in a new way.&lt;br /&gt;&lt;br /&gt;First the buying experience: I'm ecstatic, but I've not been in the water yet. Why am I ecstatic? Well, its yellow and has got lots of features I'm interested in. And its yellow. From that I take it that look and feel is important with a new product in addition to the real usability features. Uh, yeh, err... just like psql...&lt;br /&gt;&lt;br /&gt;I realise that this might be the best I ever feel about the kayak. If it has shortcomings, then I'll be disappointed. Imagine a boat with very few issues, with footrests that can be adjusted to make it just right. That sounds like I boat I'd like, and a database too.&lt;br /&gt;&lt;br /&gt;I also note that it's taken me 18 years to buy a new kayak. From that I learn that annoyances with products do build up over a period of time and that useful new features are important in changing. But kayak salesmen need to be patient and respect the views and wishes of paddlers with prior experience of other craft.&lt;br /&gt;&lt;br /&gt;What made me change? A friend bought one. Not just that - I watched him go down some whitewater that I'd had trouble on, but he edged it like it wasn't there. From that I learn that word of mouth and references are important, but demonstrations are even better.&lt;br /&gt;&lt;br /&gt;Now back to my first thought: why did I buy the Dagger? It's been interesting to watch kayak development over the intervening years, with all sorts of specialist kayaks emerging. Sea kayaks, river kayaks, whitewater and playboats. My feeling was that these were all too specialist. I wanted a boat I could use for short sea trips and whitewater. This made me think about Stonebraker's recent years.  Why the fascination with all these specialist databases? They are good for some situations, no question. But how do you know the conditions you'll be facing? How can you trust you haven't selected something too specialised?&lt;br /&gt;&lt;br /&gt;What I'd really like is a comfortable canoe that can be configured according to the conditions I meet. I don't really want a seacanoe or a playboat because then I'd need lots of different boats, all sitting waiting for the right situation. I know I can't have a modifiable kayak because its hull is made of PBS. But I can get that with software, if its configurable enough to meet my needs. Not hundreds of adjustments, just a few important parameters to allow me to tailor it to the major points of the current solution. Speed, stability, comfort, safety and security.&lt;br /&gt;&lt;br /&gt;So, some important lessons for databases: How do I make PostgreSQL bright yellow?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-828048062692121426?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/828048062692121426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/04/brand-new-kayak.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/828048062692121426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/828048062692121426'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/04/brand-new-kayak.html' title='Brand New Kayak'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-1631421002565149628</id><published>2011-04-26T00:39:00.000-07:00</published><updated>2011-04-26T00:54:07.477-07:00</updated><title type='text'>Feedback on the PostgreSQL development process</title><content type='html'>For the last few weeks, the PostgreSQL Hackers list has been discussing how to improve the PostgreSQL development process.&lt;br /&gt;&lt;br /&gt;You might be forgiven for asking "Why? What is wrong with it?". Indeed, you might.&lt;br /&gt;&lt;br /&gt;The process has changed many times down the years. Essentially, the process revolves around a few key people with the knowledge and time to contribute reviews of the submitted patches. All of those people have got views about what's right and wrong with the exact current system.&lt;br /&gt;&lt;br /&gt;What would be useful is to hear from people who&lt;br /&gt;* never submitted a patch for a definite blocking reason&lt;br /&gt;* submitted a patch but had it rejected&lt;br /&gt;* wrote a first patch but were dissuaded from doing that again&lt;br /&gt;&lt;br /&gt;If you'd like to review patches for PostgreSQL then we're short of manpower there. We're short of manpower because PostgreSQL believes that peer review is an essential technique to producing good code. You'll need to spend some time getting to understand the review process and guidelines and you may also need assistance on some technical aspects. Apart from that, reviews consist of asking questions like "Won't that break ALTER TABLE?" and observing "there's not enough code comments here, and no docs".&lt;br /&gt;&lt;br /&gt;If you have feedback, or you can help, please join the hackers list and speak out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-1631421002565149628?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/1631421002565149628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/04/feedback-on-postgresql-development.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/1631421002565149628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/1631421002565149628'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/04/feedback-on-postgresql-development.html' title='Feedback on the PostgreSQL development process'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-7784264892153107041</id><published>2011-04-21T12:12:00.000-07:00</published><updated>2011-04-21T12:34:48.040-07:00</updated><title type='text'>Busy Times</title><content type='html'>It's been 6 months since I found time to blog, which I guess shows how much I had been concentrating on getting Sync Replication finished.&lt;br /&gt;&lt;br /&gt;Sync Replication is the raison d'etre for in-database replication. Only by bringing replication to the database layer can we control the replication process in a useful way. Did it have to be transaction log shipping replication? No, I guess it might have been possible to do sync rep using other mechanisms such as triggers or writesets but the transaction log seemed the most natural way to go, at least initially.&lt;br /&gt;&lt;br /&gt;Now its done, I breathe a sigh of relief after 7 full years of work. The strange thing is that in order to fund such a task I needed to build a company, 2ndQuadrant. It's kind of like having to build the ramp up which the blocks of stone would travel for the pyramids of ancient Egypt. Anyway, its a good thing because it's brought together many contributors and opened up funding mechanisms to do the things we want to do with PostgreSQL.&lt;br /&gt;&lt;br /&gt;Now it's finished, I see all the other tasks still to do, so I'll be busy a while longer yet. Feature complete, no way.&lt;br /&gt;&lt;br /&gt;I'm pleased that I got all the essential features into sync rep that I was looking for. Transaction controlled replication, minimal bandwidth usage, shared memory queues ordered by xlog pointers, avoidance of complex configuration details and most importantly an approach everyone agrees is robust.&lt;br /&gt;&lt;br /&gt;I hadn't realised it, but the sync rep implementation is actually better than MySQL's semi-synchronous replication. Don't think anybody set out to do that, just as usual the PostgreSQL approach to building things seems to end up with a rigorous design and implementation.&lt;br /&gt;&lt;br /&gt;I'm thinking about replication because I've just been assembling the talk proposals for CHAR(11), the conference on Clustering, High Availability and Replication. The Call for Papers for the CHAR(11) conference is now closed, though we have a very cool lineup of speakers. Even better than CHAR(10) last year.&lt;br /&gt;&lt;br /&gt;As ever, more on all of the above another time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-7784264892153107041?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/7784264892153107041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2011/04/busy-times.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7784264892153107041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7784264892153107041'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2011/04/busy-times.html' title='Busy Times'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-4991492965731858326</id><published>2010-10-20T07:44:00.000-07:00</published><updated>2010-10-20T13:52:50.443-07:00</updated><title type='text'>Extensions in 9.1+</title><content type='html'>One of the most exciting developments in 9.1 will be the new CREATE EXTENSION feature that Dimitri Fontaine has been designing. Dimitri has been working on them for some time now, proposing them in detail at the 2010 Developer Meeting. Recently he's been coding them and the first patch arrived a few days ago. Reviews should happen in November, more than enough time to happen for the next release.&lt;br /&gt;&lt;br /&gt;What do extensions do? Make it easier to add and remove plugins, datatypes, functions etc with minimum fuss and without needing to compile things yourself. It turns out that there's a great many aspects to this and much more complex than I've made it sound.&lt;br /&gt;&lt;br /&gt;Dimitri has himself designed a number of very cool add-ons for PostgreSQL and its from those that he's gained insight into what's required. I've been trying to follow it myself, but I'm a bit lost on some aspects of it just yet.&lt;br /&gt;&lt;br /&gt;Anyway, looks like there will be a few websites and repositories from which you can download extensions, so the hope is that it will be much easier to both obtain and install add-in components in future versions of PostgreSQL.&lt;br /&gt;&lt;br /&gt;We're especially lucky that funding has been made available from the 4CaaST project, a Cloud Computing project funded by the European Union (under FP7). More on that another time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-4991492965731858326?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/4991492965731858326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/10/extensions-in-91.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/4991492965731858326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/4991492965731858326'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/10/extensions-in-91.html' title='Extensions in 9.1+'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-3263191523619014624</id><published>2010-10-05T18:48:00.000-07:00</published><updated>2010-10-05T19:00:45.976-07:00</updated><title type='text'>Cleaning your archive</title><content type='html'>Whether you're thinking of using PostgreSQL 9.0 yet or not, you maybe interested in a small new utility that is designed to help you clean out old WAL archive files.&lt;br /&gt;&lt;br /&gt;pg_archivecleanup is a standalone program which simply removes all WAL files older than a certain filename. You could use it like this:&lt;br /&gt;&lt;br /&gt;pg_archivecleanup /my/archive 000000010000DEAD0000BEEF&lt;br /&gt;&lt;br /&gt;The good thing here is that the tool works just fine for any release of PostgreSQL, not just 9.0. Mostly useful for bash or Windows scripts, since people will no doubt confirm it's trivial to do this in Python or perl etc..&lt;br /&gt;&lt;br /&gt;The utility was designed as a dual purpose tool, since with 9.0 pg_standby is no longer required, yet you still need some way to clear down an archive. So you can also include it in the archive_cleanup_command, like so&lt;br /&gt;&lt;br /&gt;archive_cleanup_command = 'pg_archivecleanup /my/archive %r'&lt;br /&gt;&lt;br /&gt;which gets called regularly with changing values of %r to clean out your archive directories.&lt;br /&gt;&lt;br /&gt;Not big, but its useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-3263191523619014624?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/3263191523619014624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/10/cleaning-your-archive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3263191523619014624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3263191523619014624'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/10/cleaning-your-archive.html' title='Cleaning your archive'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-40750843052386980</id><published>2010-10-01T01:15:00.000-07:00</published><updated>2010-10-01T01:32:53.245-07:00</updated><title type='text'>PostgreSQL Admin Book: Last Edit</title><content type='html'>I've been working on a PostgreSQL Administration book for some time now and am very happy to report that I'm done with the last edit on the last chapter. Hannu finished his a few days earlier.&lt;br /&gt;&lt;br /&gt;Phew!&lt;br /&gt;&lt;br /&gt;The full title of the book is "PostgreSQL 9 Administration Cookbook" and has been written by Hannu Krosing and myself. We've written it together over the course of 9 months or so. I guess it's no surprise to some, but these things always take more time than you expect.&lt;br /&gt;&lt;br /&gt;The book is in the form of short, punchy recipes that tell you what you need to know on a topic quickly with examples, then we describe how it works later. Some of the recipes are really basic to make sure we address the frequent questions, but around half are advanced topics. It's certainly taken some time to express both the basic and the advanced topics succinctly.&lt;br /&gt;&lt;br /&gt;An advanced database system needs advanced books to show it off in the best light. I very much hope it is up to the high standards of the PostgreSQL community and moves us all forwards.&lt;br /&gt;&lt;br /&gt;I'll write some more about it later. All I can really express now is relief!&lt;br /&gt;&lt;br /&gt;You can pre-order the book here:&lt;br /&gt;&lt;br /&gt;&lt;A herf="http://www.2ndquadrant.com/postgresql-books/"&gt;http://www.2ndquadrant.com/postgresql-books/&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-40750843052386980?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/40750843052386980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/10/postgresql-admin-book-last-edit.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/40750843052386980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/40750843052386980'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/10/postgresql-admin-book-last-edit.html' title='PostgreSQL Admin Book: Last Edit'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-703838388709101004</id><published>2010-06-24T13:26:00.000-07:00</published><updated>2010-06-25T05:56:10.633-07:00</updated><title type='text'>Hot Bugs &amp; Cold Beer</title><content type='html'>2ndQuadrant is sponsoring a number of Bugs &amp; Beer events at PostgreSQL user groups around the world.&lt;br /&gt;&lt;br /&gt;The idea is to get together with your friends and see if we can shake out any more bugs in Hot Standby prior to release.&lt;br /&gt;&lt;br /&gt;Particular focus on these areas:&lt;br /&gt;* transactions holding locks before/during/after base backup taken&lt;br /&gt;* prepared transactions&lt;br /&gt;* correctness of results&lt;br /&gt;* VACUUMs on master&lt;br /&gt;* any other ways you can find to break it&lt;br /&gt;&lt;br /&gt;Please write to me at simon@2ndQuadrant.com if you'd like funding for a local event.&lt;br /&gt;&lt;br /&gt;All the best,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-703838388709101004?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/703838388709101004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/06/hot-bugs-cold-beer.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/703838388709101004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/703838388709101004'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/06/hot-bugs-cold-beer.html' title='Hot Bugs &amp; Cold Beer'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-831968509442104848</id><published>2010-06-17T14:34:00.000-07:00</published><updated>2010-06-17T14:58:56.306-07:00</updated><title type='text'>What's a VLF?</title><content type='html'>I read a good blog called http://sqlfool.com/&lt;br /&gt;&lt;br /&gt;The funniest thing about it for me was the artful blogger talked about having 87,000 VLFs, taking up 1.5TB, though didn't mention what a VLF was.&lt;br /&gt;&lt;br /&gt;Anyway, I checked - VLFs are WAL files in SQLServer. In case, like me, you didn't know, VLF stands for Virtual Log File. So it's a virtual physical thing. Got it. :-\&lt;br /&gt;&lt;br /&gt;Which means the blogged-about related to 1.5TB worth of WAL files in the equivalent of pg_xlog. Ouch!&lt;br /&gt;&lt;br /&gt;Ah! That reminds me: on both SQLServer and DB2 the log contains undo information, which means that the transaction log can't reuse files while transactions are still active. So long running write transactions causes the log to grow in size and can eventually fill the disk. This can be a real pain for DBAs and requires workarounds. That effect doesn't occur with PostgreSQL, so pg_xlog never overflows for that reason. With PostgreSQL, undo information is effectively stored in the database itself in the form of previous row versions. So a database grows as changes occur. Long running write statements can have a similar effect in PostgreSQL, but not long running transactions. So, one more problem that us Postgres-people get to miss out on.&lt;br /&gt;&lt;br /&gt;And just to complete the circle, I will avoid explaining what a WAL file is here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-831968509442104848?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/831968509442104848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/06/whats-vlf.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/831968509442104848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/831968509442104848'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/06/whats-vlf.html' title='What&apos;s a VLF?'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-6007785407255364890</id><published>2010-06-17T13:49:00.000-07:00</published><updated>2010-06-17T14:06:30.287-07:00</updated><title type='text'>Smoothing replication</title><content type='html'>At first, streaming replication looked pretty raw though I've been doing a thorough review of the code. I guess that's probably how Hot Standby looked at first as well. Now, I'm getting quite excited at the way things are shaping up.&lt;br /&gt;&lt;br /&gt;Originally the WALSender process waited for 200ms after sending each chunk of data. That's now been fixed so that WALSender will stream continually until no outstanding WAL data remains.&lt;br /&gt;&lt;br /&gt;Also, the max chunk size has been reduced to 128kB, which is now the same default size used by DRBD.&lt;br /&gt;&lt;br /&gt;On Monday, I noticed that the WALSender was sending WAL data before it had been fsynced. So in case of a crash that could cause a problem. That only really matters if you're using synchronous_commit = off or fsync = off. (Though fsync = off and replication just have no business being configured simultaneously).&lt;br /&gt;&lt;br /&gt;Lots of smaller changes have also come through in recent months, so now we have the ability to get log messages when replication connects or disconnects. We also now have special messages if the replication connection is refused by the primary via the pg_hba.conf.&lt;br /&gt;&lt;br /&gt;From here, it's looking like streaming replication is fast, efficient and low latency. It's also easy to use and easy to troubleshoot. It's an impressive community effort.&lt;br /&gt;&lt;br /&gt;I'm also happy to say that almost all of the features of pg_standby have been assimilated into core now, so the only external module you'll need is something called pg_archivecleanup which is new in this release.&lt;br /&gt;&lt;br /&gt;Next few months we're going to see designs emerge for synchronous replication. That is going to require some subtle coding to get good. It sounds like a couple of people are planning prototypes of how that should work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-6007785407255364890?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/6007785407255364890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/06/smoothing-replication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6007785407255364890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6007785407255364890'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/06/smoothing-replication.html' title='Smoothing replication'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-3574738409458238937</id><published>2010-05-17T11:33:00.000-07:00</published><updated>2010-05-17T14:20:22.890-07:00</updated><title type='text'>Bollywood Features</title><content type='html'>PostgreSQL 9.0 is in the can and is coming to the end of post-production. Still looking forward to the usual last minute special effects by ILM (Industrial Lane &amp; Magic) to pull some extra zing into performance.&lt;br /&gt;&lt;br /&gt;So what next? Well, three genres attract my attention: High performance ("OLTP"), Replication and Data Warehousing. The first two are action features, while the last one is more of a romance for me. Some of the stunts for the first two are similar, so we'll be looking to reduce production costs with some clever thinking.&lt;br /&gt;&lt;br /&gt;No blockbusters this year, though hopefully some worthwhile features.&lt;br /&gt;&lt;br /&gt;High performance stuff we hope for in 9.1 will be&lt;br /&gt;&lt;br /&gt;* Group commit&lt;br /&gt;* MERGE related stuff - production costs stalled the first attempt to bring this to the big screen, though some Euro sponsorship should make this viable. Hoping that Greg Smith will take the lead role on this cos its a big performance critical project, with some hard bits.&lt;br /&gt;* Some surprise features!&lt;br /&gt;&lt;br /&gt;Replication&lt;br /&gt;&lt;br /&gt;* Synchronous replication&lt;br /&gt;* Relay replication&lt;br /&gt;* Fast switchover - an art house flick with a small, yet good following&lt;br /&gt;&lt;br /&gt;Data Warehousing features for 9.1 will be&lt;br /&gt;&lt;br /&gt;* Bit map indexes - has had its script rewritten a few times and the actors have changed as well, though it really needs to happen this time around cos its just so cool.&lt;br /&gt;I also expect to keep my eye on Partitioning features to ensure it actually works for the use cases we care about, which is Big Data.&lt;br /&gt;&lt;br /&gt;Dancing is a key element of Bollywood and the best bits are when everyone gets involved in huge Busby Berkeley numbers. Expecting the dancing to be particularly intense for Synchronous Replication though the dancers are also fairly well trained, so we're hoping for a happy ending with a cool soundtrack.&lt;br /&gt;&lt;br /&gt;Unsure if its a promise I can keep, but no more features with the word "Hot" in the title, especially since the dance routines are so long.&lt;br /&gt;&lt;br /&gt;Not going to Cannes this year, but I will be appearing at the Brits: &lt;a href="http://www.char10.org"&gt;www.char10.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-3574738409458238937?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/3574738409458238937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/05/bollywood-features.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3574738409458238937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3574738409458238937'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/05/bollywood-features.html' title='Bollywood Features'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-7758719180911873082</id><published>2010-04-27T23:43:00.000-07:00</published><updated>2010-04-28T11:25:11.306-07:00</updated><title type='text'>Tuning Hot Standby</title><content type='html'>Focus for the last month has been on tuning the new PostgreSQL 9.0 features. The latest set of changes have been around Hot Standby.&lt;br /&gt;&lt;br /&gt;Erik Rijkers published some good performance test results, very helpful, thanks. Mark Kirkwood also published some insightful results, also thanks.&lt;br /&gt;&lt;br /&gt;After the latest set of patches the results show that we get equivalent performance between master and standby under heavy load of very fast indexes SELECTs. The peak reported transaction rate was 28,000 tps (transactions per second), showing that the internal mechanics of queries during Hot Standby are very efficient. This is great news and has taken much work from myself and the usual suspects.&lt;br /&gt;&lt;br /&gt;What we have now is a very tight set of code that should provide good performance and scalability from all angles. Changes from the master are applied using minimal locking, so that a high rate of user queries should be possible even under a mixed workload of changes from master and many standby queries. What we don't yet have good independent performance tests to confirm that, or do further tuning.&lt;br /&gt;&lt;br /&gt;Of course, there's no magic there. If we give the standby the same workload of changes that the master had and then we add a whole new workload we can probably bring a server to its knees. That's just CPU physics, so nothing surprising there. What we've done is relax the internal locking to allow multiple concurrent workloads to hit the server from both directions, and also allow PostgreSQL to scale well to high numbers of CPUs.&lt;br /&gt;&lt;br /&gt;Anyway, bold words. I'm happy to hear from people that have got a good test environment, publish controlled tests and can answer detailed questions to help us isolate any strangeness in the tests. Particularly keen to have Dtrace installed, so either Solaris or SystemTap. pgbench is a good benchmarking tool for what we need, though other controlled testing is also welcome.&lt;br /&gt;&lt;br /&gt;We need independent measurements of CPU overheads and processing rates of&lt;br /&gt;* standby when no queries running, just replaying transactions&lt;br /&gt;* standby when we have a mix of changes and queries&lt;br /&gt;especially on multi-socket servers. It would also be useful to have comparisons of how moving from a single master to master plus slave can improve total cluster throughput.&lt;br /&gt;&lt;br /&gt;Summary is that things are looking good so far. Is that the end? Doubt it. What I'm saying is that these new features can now be taken seriously enough to spend time on in-depth benchmarking of your workloads to prove them for yourselves and also to see if you can find some performance issues in the current code. Plan it now, but wait for beta, which is soon...&lt;br /&gt;&lt;br /&gt;If you want to hear more about these types of issues, come to CHAR(10) conference:&lt;br /&gt;&lt;a href="http://www.char10.org/"&gt;http://www.char10.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-7758719180911873082?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/7758719180911873082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/04/tuning-hot-standby.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7758719180911873082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7758719180911873082'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/04/tuning-hot-standby.html' title='Tuning Hot Standby'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-569087774248438188</id><published>2010-04-01T00:16:00.000-07:00</published><updated>2010-04-01T00:23:41.265-07:00</updated><title type='text'>The Empty Set?</title><content type='html'>April 1st, so time to goof around a little.&lt;br /&gt;&lt;br /&gt;I discovered recently that you can have a table called " ". That's one space character or ascii #32. Just make sure you enclose it in quotes. You can also have a table with no columns. So try&lt;br /&gt;&lt;br /&gt;CREATE TABLE " " ();&lt;br /&gt;&lt;br /&gt;which works fine.  What does that look like?&lt;br /&gt;&lt;br /&gt;postgres=# select * from " ";&lt;br /&gt;--&lt;br /&gt;(0 rows)&lt;br /&gt;&lt;br /&gt;Can you have rows in this almost non-existent table?&lt;br /&gt;&lt;br /&gt;INSERT INTO " " VALUES ();&lt;br /&gt;&lt;br /&gt;fails, but let's try&lt;br /&gt;&lt;br /&gt;INSERT INTO " " DEFAULT VALUES;&lt;br /&gt;&lt;br /&gt;Works! And in fact you can insert multiple rows this way.&lt;br /&gt;&lt;br /&gt;How about an index? Surely not?? Yep, we can build an index on it, even if it has no columns, as long as it references an immutable function with constant input&lt;br /&gt;&lt;br /&gt;CREATE INDEX ON " " (exp(1));&lt;br /&gt;&lt;br /&gt;The name of the index is  " _exp_idx"! And for my coup de grace, yes, it can be a unique index&lt;br /&gt;&lt;br /&gt;CREATE UNIQUE INDEX ON " " (exp(1));&lt;br /&gt;&lt;br /&gt;which then enforces that there can only be a single row in our table (called " "). I've tried and failed to create an index that would enforce that our empty table called " " with no columns should have zero rows. Any takers?&lt;br /&gt;&lt;br /&gt;So how about a Schema? Surely not? Yep.&lt;br /&gt;&lt;br /&gt;CREATE SCHEMA " ";&lt;br /&gt;&lt;br /&gt;and a table called " " in the " " schema? Oh yes.&lt;br /&gt;&lt;br /&gt;CREATE TABLE " "." " ();&lt;br /&gt;&lt;br /&gt;I also tried VACUUM VERBOSE " "." ";&lt;br /&gt;INFO:  vacuuming " . "&lt;br /&gt;INFO:  " ": found 0 removable, 0 nonremovable row versions in 0 out of 0 pages&lt;br /&gt;DETAIL:  0 dead row versions cannot be removed yet.&lt;br /&gt;There were 0 unused item pointers.&lt;br /&gt;0 pages are entirely empty.&lt;br /&gt;CPU 0.00s/0.00u sec elapsed 0.00 sec.&lt;br /&gt;VACUUM&lt;br /&gt;&lt;br /&gt;Nothing practical comes out of that at all, just some fun. Needless to say, we only cover practical and useful things on 2ndQuadrant's courses...serious stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-569087774248438188?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/569087774248438188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/04/empty-set.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/569087774248438188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/569087774248438188'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/04/empty-set.html' title='The Empty Set?'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-1678654864280251955</id><published>2010-03-26T07:19:00.001-07:00</published><updated>2010-03-26T07:30:39.398-07:00</updated><title type='text'>Tuning Replication</title><content type='html'>Performance of streaming replication had been bothering me for some time. I'd noticed that the CPU utilisation was extremely high, so that the WALSender process was guzzling CPU even when nothing was happening.&lt;br /&gt;&lt;br /&gt;When we think we have a clue about something and we were right we call that "intuition" and it sounds all mystical and clever. When we are wrong about something we call those "preconceptions". Strange difference of wording. Anyway, I had an idea that turned out to be a preconception. I started by looking for a smoking gun: one part of the system that would turn out to be using more CPU than another. There was no smoking gun, so that trail was a deadend. So next idea was just to look at the bgwriter code to see if there were any clear differences.&lt;br /&gt;&lt;br /&gt;Anyway, the real culprit was something trivial. WALSender was supposed to sleep every 200ms by default. What it was actually doing was sleeping for 200 microseconds and then seeing if there was anything to send. So all it took to improve performance was to multiply by 1000 for the call to pg_usleep(). If only tuning databases was ever that simple!&lt;br /&gt;&lt;br /&gt;That leaves me to say that the streaming replication now has a clean bill of health from an overall performance perspective. As far as I can see,  YMMV, caveat emptor etc..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-1678654864280251955?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/1678654864280251955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/03/tuning-replication.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/1678654864280251955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/1678654864280251955'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/03/tuning-replication.html' title='Tuning Replication'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-6540158261434380575</id><published>2010-03-14T13:29:00.000-07:00</published><updated>2010-03-14T14:18:38.279-07:00</updated><title type='text'>3.14159265358979</title><content type='html'>I'm told today is Pi day, in celebration of our friendly transcendental constant and because today is the 14th March, which is written as 3.14 in some locales....&lt;br /&gt;&lt;br /&gt;So I thought I'd celebrate with a look at Postgres' mathematical musculature.&lt;br /&gt;&lt;br /&gt;postgres=# select pi();&lt;br /&gt;       pi       &lt;br /&gt;------------------&lt;br /&gt;3.14159265358979&lt;br /&gt;&lt;br /&gt;Cool! That matches on all the digits, so we're rocking. So what datatype is this?&lt;br /&gt;&lt;br /&gt;postgres=# select pg_typeof(pi());&lt;br /&gt;   pg_typeof    &lt;br /&gt;------------------&lt;br /&gt;double precision&lt;br /&gt;&lt;br /&gt;and as the manual says, we support at least 15 digits for this datatype. Even better. So let's flex those long dormant trigonometry muscles:&lt;br /&gt;&lt;br /&gt;postgres=# select sin(90);&lt;br /&gt;       sin       &lt;br /&gt;-------------------&lt;br /&gt;0.893996663600558&lt;br /&gt;&lt;br /&gt;Oh no! Surely sin() of 90 degrees is 1.0? Perhaps the default is radians and I just forgot. Of course, doh! The manual doesn't actually say, which seems like a flaw. Here comes a doc patch. So lets supply radians instead.&lt;br /&gt;&lt;br /&gt;postgres=# select sin(radians(90));&lt;br /&gt;sin&lt;br /&gt;-----&lt;br /&gt;  1&lt;br /&gt;&lt;br /&gt;Phew! That works. Now lets try some advanced stuff. There are 2*pi() radians in a circle, so pi() radians is half way round. So the sin() of that should be 0, and the cos() should be 1.&lt;br /&gt;&lt;br /&gt;postgres=# select sin(pi()), cos(pi());&lt;br /&gt;        sin          | cos&lt;br /&gt;----------------------+-----&lt;br /&gt;1.22464679914735e-16 |  -1&lt;br /&gt;&lt;br /&gt;Hmmm. That is somewhat strange, but I guess that pi is transcendental so any representation with a fixed number of digits will always be slightly wrong by exactly that number of digits. That makes sense, but I guess I was expecting sin(pi()) to return 0.&lt;br /&gt;&lt;br /&gt;Just to put this in perspective, in comparison to the diameter of the earth that is a precision of about one millionth of a millimetre. So that is very accurate for most applications.&lt;br /&gt;&lt;br /&gt;Let's quickly check "e", another well known transcendental. We don't provide a function for e as we do for pi, but its easy to calculate.&lt;br /&gt;&lt;br /&gt;postgres=# select exp(1);&lt;br /&gt;      exp       &lt;br /&gt;------------------&lt;br /&gt;2.71828182845905&lt;br /&gt;&lt;br /&gt;That looks good. So lets play some games with that also.&lt;br /&gt;&lt;br /&gt;postgres=# select ln(exp(1));&lt;br /&gt;ln&lt;br /&gt;----&lt;br /&gt; 1&lt;br /&gt;&lt;br /&gt;Thank goodness for that. All good. I notice in the docs that exp() takes either a double precision or a numeric input, so which one did we just try there? Let's see&lt;br /&gt;&lt;br /&gt;postgres=# select ln(exp(1::float));&lt;br /&gt;ln&lt;br /&gt;----&lt;br /&gt; 1&lt;br /&gt;&lt;br /&gt;and lets also try&lt;br /&gt;&lt;br /&gt;postgres=# select ln(exp(1)::numeric);&lt;br /&gt;        ln        &lt;br /&gt;--------------------&lt;br /&gt;1.0000000000000018&lt;br /&gt;&lt;br /&gt;Hmmm. Looks like Postgres is being irrational. Or should that be insufficiently irrational? It's been a long day. I can't wait for "sqrt(2) day".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-6540158261434380575?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/6540158261434380575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/03/314159265358979.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6540158261434380575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/6540158261434380575'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/03/314159265358979.html' title='3.14159265358979'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-5275162561323254222</id><published>2010-02-04T06:18:00.000-08:00</published><updated>2010-02-04T06:24:38.703-08:00</updated><title type='text'>Parallel Query (1)</title><content type='html'>I recently returned from a lunch meeting of the UK ex-Teradatans to see old friends and colleagues. Some people know that I spent time with Teradata when it was in startup mode, what seems like a very long time ago now. Anyway, that's left me with good knowledge and interest in parallel database systems. And that's why I know Greenplum's Chief Architect Chuck McDevitt and hence why I've been using Greenplum on and off since 2005. Greenplum have also funded some of the developments I've done for PostgreSQL.&lt;br /&gt;&lt;br /&gt;I'm disappointed we've not made much progress with parallel operations and partitioning in core Postgres in last few releases. Recent Greenplum results show we have much work to do in improving things. &lt;a href="http://community.greenplum.com/showthread.php?t=113"&gt;http://community.greenplum.com/showthread.php?t=113&lt;/a&gt;&lt;br /&gt;Some people may think I should be sad at that, though the way I see it, Greenplum is very close to being PostgreSQL. It just happens to have some good performance enhancements of great use in Data Warehousing. A few other enhanced versions of Postgres exist also.&lt;br /&gt;&lt;br /&gt;Some other recent results also show that MonetDB and Infobright don't fare any better by comparison either.&lt;br /&gt;&lt;a href="http://community.greenplum.com/showthread.php?t=111"&gt;http://community.greenplum.com/showthread.php?t=111&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Having seen the above results I'm thinking about projects for next release now. Anybody want to fund some additional Data Warehousing features in Postgres core? I'm determined that next release we will get Bitmap Indexes in core, at least.&lt;br /&gt;&lt;br /&gt;There's some more to discuss on parallel query, such as "How does this all relate to Hot Standby?",  so I'll follow up later with another blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-5275162561323254222?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/5275162561323254222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/02/parallel-query-1.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/5275162561323254222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/5275162561323254222'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/02/parallel-query-1.html' title='Parallel Query (1)'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-1830236284478012821</id><published>2010-01-28T13:17:00.000-08:00</published><updated>2010-01-28T13:29:38.774-08:00</updated><title type='text'>9.0 Replication Features</title><content type='html'>We're getting close to deadline now for the next release of PostgreSQL.&lt;br /&gt;&lt;br /&gt;Tensions running high as usual.&lt;br /&gt;&lt;br /&gt;My concerns at this stage are always that we get some rounded features in before the doors close. It's always a shame to ship software exactly on time if that misses out on a few essential extras. Mind you without a hard deadline things do tend to slip for weeks and months on any project, not just PostgreSQL.&lt;br /&gt;&lt;br /&gt;We're all working hard on the various replication features while we still can.&lt;br /&gt;&lt;br /&gt;Greg Smith's been doing a great job improving pg_standby for use in file-based WAL shipping. I'm working on conflict resolution and other essential internals for Hot Standby. Hannu Krosing has been looking at improvements in Londiste replication, though that's not strictly tied to the release of PostgreSQL core.&lt;br /&gt;&lt;br /&gt;We'll get there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-1830236284478012821?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/1830236284478012821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/01/90-replication-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/1830236284478012821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/1830236284478012821'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/01/90-replication-features.html' title='9.0 Replication Features'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-2329209533756468851</id><published>2010-01-18T05:06:00.000-08:00</published><updated>2010-01-18T05:49:03.391-08:00</updated><title type='text'>Mating Elephants</title><content type='html'>I've just discovered that we'll not be including Synchronous Replication in the next version of PostgreSQL, which is a surprise after so much work. (We will have streaming replication, however).&lt;br /&gt;&lt;br /&gt;Remembering that the PostgreSQL symbol is an elephant (apart from in Japan), there is an old office joke that seems strangely appropriate. It goes like this:&lt;br /&gt;&lt;br /&gt;Getting anything done around here is like mating elephants&lt;br /&gt;* Everything gets decided at a high level&lt;br /&gt;* There's a lot of stomping and trumpeting&lt;br /&gt;* And it takes two years to get any results&lt;br /&gt;&lt;br /&gt;Anyway, I'm sure we'll get there in the end so we can get multiple elephants synchronised.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-2329209533756468851?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/2329209533756468851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/01/mating-elephants.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/2329209533756468851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/2329209533756468851'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/01/mating-elephants.html' title='Mating Elephants'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-3097164477238628733</id><published>2010-01-11T14:34:00.000-08:00</published><updated>2010-01-12T02:12:23.010-08:00</updated><title type='text'>Hybrid Row/Column Datastores</title><content type='html'>One of the things I wanted to talk about in more detail at PGday Europe in November was  hybrid row/column stores for PostgreSQL. I've just read some more stuff about column stores and that's made me remember this again.&lt;br /&gt;&lt;br /&gt;I'd read lots of hot air about how databases organised as column stores are much better than row stores and quite frankly I was getting a little tired of it. Sometime in 2007, I came up with a great solution but it really is taking quite a while to get going with this. Let's start with the background.&lt;br /&gt;&lt;br /&gt;The column store argument is that if you separate out each column in a table into its own slice of data then this can be stored as bitmaps. These achieve very good compression ratios for each column. To answer a query you just link together all the individual columns required for the query and you've finished. So query cost is O(n) on the number of (compressed) columns in the query, rather than a row store for which data access is O(m) on the number of columns in the table. Column stores are great at doing things like count(*) but not very fast at retrieving data. So there are lots of queries that would show how good column stores can be, plus lots of examples of really bad queries as well. It all really depends upon what your exact query mix will be.&lt;br /&gt;&lt;br /&gt;My main issue with column stores is how will you know ahead of time what your data warehouse query mix will be? If you are forced to pick one database product or another before you've even run a query then it seems a very risky decision. Would you base your data warehousing strategy on that? What we really want is a hybrid row/column datastore where you can have some data in row form and some data in column form.&lt;br /&gt;&lt;br /&gt;Nobody seemed to have noticed that the column store data is exactly the same format as bitmap indexes on a single column. So, if we had a bitmap index on every column in a table we would be able to use exactly the same algorithm to extract data as column store databases do. The only implementation barriers would be that we don't yet have index-only scans, nor do we have the ability to have columns that are stored *only* in the index. This latter capability would mean that the heap row might actually hold only the visibility information and all other data would be held in indexes. I admit it sounds crazy, but it is exactly what column stores already do to extract data from the individual columns; we can do that also, it would be just an additional step in the executor to retrieve columns and assemble a result row.&lt;br /&gt;&lt;br /&gt;Now the beauty of this approach is that you don't have to make choices between using a row and a column store database. You can choose, column-by-column if you wish, which columns will be "column-oriented" and which columns are "row-oriented", or you can have both.&lt;br /&gt;&lt;br /&gt;So the things we need to make row/column hybrids work in PostgreSQL are&lt;br /&gt;&lt;br /&gt;* Bitmap indexes&lt;br /&gt;* Index-only scans&lt;br /&gt;* Index-only columns&lt;br /&gt;&lt;br /&gt;So core Postgres is at least one release away from that.&lt;br /&gt;&lt;br /&gt;There are a couple of other thoughts alongside that as well. First is "join removal", now in 8.5, which is an optimizer technique for removing tables that we don't actually need to answer queries. I was very interested in that because it allows us to speed up queries by providing a mechanism for vertically partitioned tables - splitting a table into many tables each with a subset of columns. If you slice them up correctly then you avoid significant I/O when accessing tables when you only want a few of the columns. It was the first step in the right direction and I pursued it initially because it required only optimizer changes to make it work. I'll explain more about that on another post.&lt;br /&gt;&lt;br /&gt;Last thought is about Greenplum and of course the new Single Node Edition. The latest version now has column-oriented storage as well as row oriented storage. So you have the option of choosing the design that will work best for your needs. It's a step towards where I'd like to see us go, plus GP is at least a year ahead of core Postgres in getting some form of column orientation. Initial indications are that it is faster also, though I've yet to do any objective performance tests. Been busy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-3097164477238628733?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/3097164477238628733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/01/hybrid-rowcolumn-datastores.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3097164477238628733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3097164477238628733'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/01/hybrid-rowcolumn-datastores.html' title='Hybrid Row/Column Datastores'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-809213239658515619</id><published>2010-01-05T14:59:00.000-08:00</published><updated>2010-01-05T15:34:43.829-08:00</updated><title type='text'>Extra Cost Option</title><content type='html'>Oracle's version of the Hot Standby concept is called Active Data Guard. You may know that Oracle11g was the first release of Oracle to have this functionality, so as of PostgreSQL 8.5, we will be on par. Probably worth adding that IBM DB2 doesn't have anything similar.&lt;br /&gt;&lt;br /&gt;Someone just pointed out to me that Active Data Guard is an extra cost option with Oracle. Please point this out to your IT Manager!&lt;br /&gt;&lt;br /&gt;Oracle suggests the following benefits for Active Data Guard&lt;br /&gt;&lt;ul&gt;&lt;li class="first-child"&gt;&lt;strong&gt;Increase performance&lt;/strong&gt;—Offload unpredictable workloads to an up-to-date replica of the production database&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Simplify operations&lt;/strong&gt;—Eliminate management complexity that accompanies traditional replication solutions&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Eliminate compromise&lt;/strong&gt;—The reporting replica is up to date and online at all times, which is not possible with traditional storage mirroring technology&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Reduce cost&lt;/strong&gt;—An Oracle Active Data Guard physical standby database can also provide disaster recovery and/or serve as a test database—no additional storage or servers required&lt;/li&gt;&lt;/ul&gt;I think the first one definitely applies for PostgreSQL. The second and third depend upon what you're comparing against. I don't really understand the last claim: yes, the standby provides disaster recovery, but then so did Inactive(?) Data Guard/Warm Standby. And this idea about test databases seems a little strange, since the standby is read-only its not going to be a very useful test database.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-809213239658515619?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/809213239658515619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2010/01/extra-cost-option.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/809213239658515619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/809213239658515619'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2010/01/extra-cost-option.html' title='Extra Cost Option'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-8572005364039139301</id><published>2009-12-22T06:11:00.000-08:00</published><updated>2009-12-22T06:51:35.874-08:00</updated><title type='text'>Hot Standby TODO</title><content type='html'>Well, finally managed to get Hot Standby committed on Friday. The build farm was still Green on Saturday, so my efforts to keep the patch non-build specific seem to have paid off.&lt;br /&gt;&lt;br /&gt;Quite a few bugs fixed in the days up to release and I ended up working 19 days straight on getting it into Postgres. Walking to the South Pole does seem like an easier challenge.&lt;br /&gt;&lt;br /&gt;Couple of things already reported, so thanks to those vigilant community members. One a doc change and another a bug effecting idle sessions connected to a database that is being dropped. Strangely, we correctly handle the case where they are running SQL, just mess up when they aren't doing anything at all. It's minor, but still a few hours to fix.&lt;br /&gt;&lt;br /&gt;There's been various discussions on Hackers about what features are needed next. For the most part, everybody wants their pet peeve of the moment to be a must-fix item. Given that I am actually human, I need to work through the tasks in a priority order and we need to get some balance about what that order should be.&lt;br /&gt;&lt;br /&gt;I'll be hosting a few Hot Standby User Groups (HugS) to discuss in more detail the issues surrounding the feature and what people think they want. If you want to be a Hugger, please come along.&lt;br /&gt;&lt;br /&gt;Plan is to have some HugS remotely, then do New York and FOSDEM in February. If you'd like to come along for some HugS please register at &lt;a href="http://www.2ndquadrant.com/"&gt;http://www.2ndQuadrant.com/&lt;/a&gt;. The first remote HugS is planned for January 6 at 1600UTC.&lt;br /&gt;&lt;br /&gt;I hope you can come along to help adjust my priorities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-8572005364039139301?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/8572005364039139301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2009/12/hot-standby-todo.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/8572005364039139301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/8572005364039139301'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2009/12/hot-standby-todo.html' title='Hot Standby TODO'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-7120820133292424013</id><published>2009-10-08T01:42:00.000-07:00</published><updated>2009-10-08T01:58:03.404-07:00</updated><title type='text'>Fried Eggs</title><content type='html'>When I was 24, I was asked to attend an emergency breakfast meeting to discuss the then current project. The Director had heard that the project was 1000 times slower than it needed to be. The Salesman's hands were shaking as I explained the performance results and their implications, in front of a group of people all more senior than myself. It was heresy, but once said, everything changed for the better, though I didn't know that as I spoke. I learned a lesson that day that I have never forgotten.&lt;br /&gt;&lt;br /&gt;We try to work on a consensus basis on the PostgreSQL project. Some people assume that to mean that we must all agree. Others complain that this means everybody has a veto.&lt;br /&gt;&lt;br /&gt;The committers are the eventual decision makers on the PostgreSQL project. Good decision making processes require collection of information prior to making a decision. Sometimes we don't have time for that, sometimes we do. "When" is always part of decision making.&lt;br /&gt;&lt;br /&gt;Opinions must be openly disagreed with, if there is a clear and important reason and you are qualified to do so. That is the only way to give a decision maker all the information they need to take the right decision. Those decisions may require overruling an objector. Once a decision has been reached, it is best to quieten disagreement, since we don't have endless time and must move onto other matters. It is sometimes difficult to know when a decision maker speaks whether it is a decision, or an opinion. If we all (including, most importantly, a decision maker themselves) assume that every word spoken by a decision maker is a firm decision then that quickly leads to poor quality decisions. Consensus does not imply acquiescence, it requires both speaking and listening, in all directions.&lt;br /&gt;&lt;br /&gt;Mahatma Gandhi said "&lt;i&gt;Honest disagreement&lt;/i&gt; is often a good sign of progress."&lt;br /&gt;&lt;br /&gt;If your disagreement is honest, then speak it clearly, politely and impersonally. Once decisions have been made, that disagreement should be put to one side, at least for this release. Honest disagreement is not a challenge to authority, it shows respect for the goals we all work towards.&lt;br /&gt;Honest agreement is also important. If you agree, do not withhold that for partisan or political reasons.&lt;br /&gt;&lt;br /&gt;All easy to say, much harder to do.&lt;br /&gt;&lt;br /&gt;(The lesson? Never eat fried eggs while trying to say something important.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-7120820133292424013?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/7120820133292424013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2009/10/fried-eggs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7120820133292424013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7120820133292424013'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2009/10/fried-eggs.html' title='Fried Eggs'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-5859161647077794397</id><published>2009-09-18T13:03:00.000-07:00</published><updated>2009-09-18T13:26:43.296-07:00</updated><title type='text'>Create Index CONCURRENTLY</title><content type='html'>I saw Depesz just came up against something on pgsql-bugs that I've done a couple of times.&lt;br /&gt;&lt;br /&gt;CREATE INDEX CONCURRENTLY&lt;br /&gt;        ON tablename (column list);&lt;br /&gt;&lt;br /&gt;Works perfectly. It adds an index called "concurrently" onto "tablename". That part is actually quite funny, and easily correctable using&lt;br /&gt;&lt;br /&gt;ALTER INDEX concurrently RENAME TO something_sensible;&lt;br /&gt;&lt;br /&gt;It's a very good lesson in why its a great idea to use tab completion, or a GUI. I have another story about that though, for another day.&lt;br /&gt;&lt;br /&gt;Anyway, the really painful part about creating our index above is that the DBA (yours truly) intended to create an index concurrently, that is "concurrently" as an adverb rather than noun. The result is that you run a normal CREATE INDEX statement, so you end up applying a ShareLock to the table and all writes against the table stop. Of course, that happens right at the moment where you decide a cappuccino is a great plan and drive out for a round of coffee while the index build runs. Neat huh?&lt;br /&gt;&lt;br /&gt;I figure I'm not the only person to forget to make mistakes and if we never admit them the software won't improve. So I'll see if we can come up with a little patch that avoids us adding "concurrently" as a reserved word. Not sure I see the problem really, since I never met anyone who named their database objects using adverbs rather than nouns. I bet there's one. There always is.&lt;br /&gt;&lt;br /&gt;Anyway, the moral of the story is use&lt;br /&gt;&lt;br /&gt;CREATE INDEX CONCURRENTLY indexname&lt;br /&gt;        ON tablename (column list);&lt;br /&gt;&lt;br /&gt;Well actually, its not, but this is: Production systems are like lions - never turn your back on them, even after they've been fed, no matter how long you've been training them. And even lion tamers get bitten, sometimes. (And that is why I spend so long developing recovery features).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-5859161647077794397?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/5859161647077794397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2009/09/create-index-concurrently.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/5859161647077794397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/5859161647077794397'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2009/09/create-index-concurrently.html' title='Create Index CONCURRENTLY'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-7979340627558966225</id><published>2009-09-10T03:14:00.000-07:00</published><updated>2009-09-10T03:29:17.100-07:00</updated><title type='text'>Winning the Lottery</title><content type='html'>This week I'm the lucky recipient of about £23,750,000. That comes from various wills, lottery wins and corrupt magnates who can't cash a cheque any other way, except via me. So they say.&lt;br /&gt;&lt;br /&gt;Last week I won more, I'm sure of it.&lt;br /&gt;&lt;br /&gt;Did these guys ever need a database so they can deploy advanced marketing techniques!&lt;br /&gt;(phone rings) ....&lt;phone&gt; ah, what's that? .... really? .... oh, how embarrassing, 3 you say? ....Maybe it needs tuning then, or perhaps replication? It does? Cool.... what's that? Could I just send a cheque for £100, so you can have my payment details correct and then you'll send through the consulting fees?.... &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Hmmm&lt;/span&gt;, maybe not after all.  &lt;hangs&gt;(hangs up)&lt;br /&gt;&lt;br /&gt;Definitely hard to know which communications to receive and which to ignore. I figure if you read everything you'd never get anything done at all. I guess it's a balance and everybody chooses their own personal balance point.&lt;br /&gt;&lt;br /&gt;Anyway, forget that, I'm off to spend my winnings: Woo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;hoo&lt;/span&gt; - So long, Lao Che!&lt;/hangs&gt;&lt;/phone&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-7979340627558966225?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/7979340627558966225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2009/09/winning-lottery.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7979340627558966225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/7979340627558966225'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2009/09/winning-lottery.html' title='Winning the Lottery'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-3739856605128489833</id><published>2009-09-07T01:20:00.001-07:00</published><updated>2009-09-07T01:27:59.492-07:00</updated><title type='text'>Hot Standby</title><content type='html'>I'm currently working on the Hot Standby project, which kicked off design and development around July 2008 and was active through to February 2009. After a break to assist with the release of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Postgres&lt;/span&gt; 8.4, the project began again in July 2009 as planned. It's definitely been a voyage of discovery.&lt;br /&gt;&lt;br /&gt;Hot Standby seems to be a popular feature from two recent polls, so I guess that is why some people have been getting fairly anxious about the project recently. Anyway, what is it? Why is it important? Let me explain.&lt;br /&gt;&lt;br /&gt;If you set up Log Shipping replication with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;PostgreSQL&lt;/span&gt; (called "Warm Standby" in the docs), you'll discover that the standby node can't run queries. All it does is keep processing changes so that it keeps mostly/nearly/eventually up to date with the Master - hence why its called a "warm" standby. Useful, but not enough, hence we move on to Hot Standby.&lt;br /&gt;&lt;br /&gt;Why "Hot"? I've used the terms Cold/Warm/Hot similarly to the way they're used in other areas of High Availability computing. A Cold Standby/Spare is one that isn't available for immediate use and requires some work to get things configured. A Warm Standby/Spare is one that can be put into action fairly quickly, while a Hot Standby/Spare is one that can be used immediately without taking the system offline.&lt;br /&gt;&lt;br /&gt;With &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Postgres&lt;/span&gt;, Hot Standby refers to the ability to&lt;br /&gt;&lt;br /&gt;* Run read-only queries on a standby server that is being concurrently maintained by log shipping replication. We use full &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MVCC&lt;/span&gt; so read-only queries don't block incoming changes, nor do the changes lock out queries. There are some conflicts that can occur, discussed later.&lt;br /&gt;&lt;br /&gt;* Switch from standby mode to normal/master-mode without stopping/restarting the server. So queries keep on running without interruption while the database server changes mode - hence it is "Hot". Many people are unaware of this second aspect of the feature.&lt;br /&gt;&lt;br /&gt;The reasons for query conflicts are fairly detailed for a short blog, so I'll cover that in a later post. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;There'll&lt;/span&gt; be detailed docs with the patch when it's available around Sept 15.&lt;br /&gt;&lt;br /&gt;The strange thing about Hot Standby is "it just works". When you run a few queries there's an initial buzz, but then you realise that it all works normally without much fuss. That's a shame really because this is probably the most technical patch to hit &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Postgres&lt;/span&gt; in years, involving many different parts of the internals. Seems fair though, after all, I admit I give scarcely no thought to all the people who spent time on the hardware and software that allows me to write this and for you to read it.&lt;br /&gt;&lt;br /&gt;I'll be in Tokyo for the &lt;a href="http://www.postgresql.org/about/event.824"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;JPUG&lt;/span&gt; 10&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;th&lt;/span&gt; Anniversary meeting&lt;/a&gt; later this year to present about Hot Standby. I'm very pleased to be attending and it would be a good place to learn more.&lt;br /&gt;&lt;br /&gt;There's a &lt;a href="http://www.2ndquadrant.com/postgresql-training/courses/26"&gt;practical course&lt;/a&gt; in London in late September if you want to work together while we cover the full details on Hot Standby and replication. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;P&lt;/span&gt;robably be more training dates and other events over the coming months also.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-3739856605128489833?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/3739856605128489833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2009/09/im-currently-working-on-hot-standby.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3739856605128489833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/3739856605128489833'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2009/09/im-currently-working-on-hot-standby.html' title='Hot Standby'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9053536529694784563.post-4609208893077538519</id><published>2009-09-01T22:46:00.000-07:00</published><updated>2009-09-02T01:13:10.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><title type='text'>Database Biology</title><content type='html'>From Biology we learn that all (known) complex organisms are comprised of multiple cells. Cells are not simple things, but their most important quality is their ability to work together to create something much bigger than themselves.&lt;br /&gt;&lt;br /&gt;Large, mature businesses end up with hundreds of databases to perform all of their business functions. Yet we seem still to have much difficulty in making databases work together. ETL, EAI and information integration tools seem to help somewhat but that feels more like plumbing than intelligent integration.&lt;br /&gt;&lt;br /&gt;My goal for some years now has been to create ways for databases to work together in more complex ways, not just operate as single-celled organisms. The backbone of that is change propagation between the cells, which most people call database replication. That is why I've been so engaged in enhancing replication for so many years but it is not an end in itself. Sure, most of that has been for PostgreSQL - but then that's OK because everybody uses that, whether they even know/admit it or not.&lt;br /&gt;&lt;br /&gt;Making it work is the first step. Making it all work easily is important also. With my background in solutions, I've personally preferred a toolkit approach that allows good custom solutions to be developed. Shrink-wrap software is needed as well and that's why I've been working with Robert Hodges of Continuent to help bring a compelling solution forwards that has both a good out-of-the-box feel as well as the flexibility to solve those tricky requirements people keep throwing at me. (Don't stop! It's fun)&lt;br /&gt;&lt;br /&gt;Streaming, synchronous replication will be with us by next Summer if the release dates all go to plan. The ability to run queries on standby servers while they actively accept new changes from their master will also be with us soon: Hot Standby.&lt;br /&gt;&lt;br /&gt;I'll blog more about Hot Standby for PostgreSQL over the coming weeks. In the longer term I'll explain more about the directions I hope to take with clustered databases, and why.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9053536529694784563-4609208893077538519?l=database-explorer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://database-explorer.blogspot.com/feeds/4609208893077538519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://database-explorer.blogspot.com/2009/09/database-biology.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/4609208893077538519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9053536529694784563/posts/default/4609208893077538519'/><link rel='alternate' type='text/html' href='http://database-explorer.blogspot.com/2009/09/database-biology.html' title='Database Biology'/><author><name>Simon Riggs</name><uri>http://www.blogger.com/profile/06017750505968534813</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_ZolbqVCc7yo/Sp5RdNZ8KGI/AAAAAAAAAA4/sdtd62NNAzA/S220/mountain_simon.jpg'/></author><thr:total>1</thr:total></entry></feed>
