<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Magnus Hagander's PostgreSQL blog - PostgreSQL</title>
    <link>http://blog.hagander.net/</link>
    <description></description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    
    

<item>
    <title>Time management by (somebody elses) press-releases</title>
    <link>http://blog.hagander.net/archives/162-Time-management-by-somebody-elses-press-releases.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/162-Time-management-by-somebody-elses-press-releases.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=162</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=162</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;A while back I submitted a couple of talks for &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=201&amp;amp;entry_id=162&quot; title=&quot;http://www.postgresqlconference.org/2010/east/&quot;  onmouseover=&quot;window.status=&#039;http://www.postgresqlconference.org/2010/east/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;PG-East 2010&lt;/a&gt; in Philly, and over the past couple of weeks I&#039;ve been nagging the organizers semi-frequently to get some pre-info on whether I&#039;ve been accepted or not, since flight prices started to climb fairly rapidly. The site clearly says information that the information will be available on Feb 15th, so I can&#039;t really complain that the answer kept being &amp;quot;don&#039;t know yet&amp;quot;.&lt;/p&gt;

&lt;p&gt;A couple of days ago, I got a note from &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=202&amp;amp;entry_id=162&quot; title=&quot;http://pgsnake.blogspot.com&quot;  onmouseover=&quot;window.status=&#039;http://pgsnake.blogspot.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;Dave&lt;/a&gt; pinged me with a message asking if I was approved. Turns out &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=203&amp;amp;entry_id=162&quot; title=&quot;http://www.prnewswire.com/news-releases/enterprisedb-signs-on-as-exclusive-platinum-sponsor-of-pg-east-2010-to-enhance-industrys-largest-independent-open-source-database-event-83439987.html&quot;  onmouseover=&quot;window.status=&#039;http://www.prnewswire.com/news-releases/enterprisedb-signs-on-as-exclusive-platinum-sponsor-of-pg-east-2010-to-enhance-industrys-largest-independent-open-source-database-event-83439987.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;this press-release&lt;/a&gt; had been posted (by his company, no less). Which explicitly names me as a speaker at the conference.&lt;/p&gt;

&lt;p&gt;Took me two more days of chasing down &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=204&amp;amp;entry_id=162&quot; title=&quot;http://www.commandprompt.com/blogs/joshua_drake/&quot;  onmouseover=&quot;window.status=&#039;http://www.commandprompt.com/blogs/joshua_drake/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;JD&lt;/a&gt;, but I now have confirmation I&#039;ll be there. I don&#039;t actually know what I&#039;ll be speaking about, but it&#039;s a pretty safe bet it will be PostgreSQL related.&lt;/p&gt;

&lt;p&gt;I call this &lt;i&gt;Time management by press releases&lt;/i&gt;. If I could only get it to apply to all meetings, I would no longer need to keep my own calendar up to date.&lt;/p&gt;

&lt;p&gt;So, I&#039;ll see you in Philly!&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Mon, 08 Feb 2010 16:07:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/162-guid.html</guid>
    <category>Conferences</category>
<category>postgresql</category>

</item>
<item>
    <title>Integrating django authentication with PostgreSQL</title>
    <link>http://blog.hagander.net/archives/161-Integrating-django-authentication-with-PostgreSQL.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/161-Integrating-django-authentication-with-PostgreSQL.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=161</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=161</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;If you&#039;ve been to any of my &lt;i&gt;pgcrypto&lt;/i&gt; talks, you know I&#039;m a fan of exposing a login interface in the database. It&#039;s a great way to allow multiple systems to use the same authentication system, without being limited to a single framework. However, it can often be nice and easy to  be able to use the account management system in said framework, because it&#039;s already there.&lt;/p&gt;

&lt;p&gt;When I go to frameworks, &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=199&amp;amp;entry_id=161&quot; title=&quot;http://www.djangoproject.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.djangoproject.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;django&lt;/a&gt; is my current favorite, and I do like the ability to use it&#039;s integrated admin system to edit users. For this reason, I wanted to add the ability to use a database function to authenticate other systems using the django user tables. Thanks to the fact that django choose a nicely readable text format for their hashes, and that PostgreSQL has the awesome &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=200&amp;amp;entry_id=161&quot; title=&quot;http://www.postgresql.org/docs/current/static/pgcrypto.html&quot;  onmouseover=&quot;window.status=&#039;http://www.postgresql.org/docs/current/static/pgcrypto.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;pgcrypto&lt;/a&gt; library, this is pretty simple. Here&#039;s a function that will simply return true if authentication was successful, and false if not.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;sql&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;OR&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;REPLACE&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FUNCTION&lt;/span&gt; django_login &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;_username text, _password text&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;RETURNS &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;BOOLEAN&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;AS&lt;/span&gt; $$&lt;br /&gt;BEGIN&lt;br /&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;EXISTS&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; auth_user &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; username=_username&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; THEN&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;RETURN&lt;/span&gt; encode&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;pgcrypto.digest&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;split_part&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;password, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;$&#039;&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; || _password, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;sha1&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;hex&#039;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;split_part&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;password, &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;$&#039;&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; auth_user &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; username=_username;&lt;br /&gt;&amp;#160; &amp;#160;ELSE&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;RETURN&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;f&#039;&lt;/span&gt;;&lt;br /&gt;&amp;#160; &amp;#160;END &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt;;&lt;br /&gt;END;&lt;br /&gt;$$&lt;br /&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;LANGUAGE&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&#039;plpgsql&#039;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This assumes you have installed &lt;i&gt;pgcrypto&lt;/i&gt; in it&#039;s own schema, something I always recommend. If you haven&#039;t, just remove the schema specifier in the query.&lt;/p&gt;

&lt;p&gt;Finally, if you use this type of authentication, remember to &lt;strong&gt;use SSL&lt;/strong&gt;. And don&#039;t enable query logging...&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Tue, 12 Jan 2010 20:50:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/161-guid.html</guid>
    <category>django</category>
<category>pgcrypto</category>
<category>postgresql</category>
<category>security</category>

</item>
<item>
    <title>64-bit Windows in PostgreSQL</title>
    <link>http://blog.hagander.net/archives/160-64-bit-Windows-in-PostgreSQL.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/160-64-bit-Windows-in-PostgreSQL.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=160</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=160</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;Let me first say that I still stand by my &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=197&amp;amp;entry_id=160&quot; title=&quot;http://blog.hagander.net/archives/73-PostgreSQL-vs-64-bit-windows.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.hagander.net/archives/73-PostgreSQL-vs-64-bit-windows.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;previous comments&lt;/a&gt; that PostgreSQL is in much less need of a native 64-bit version on Windows than other databases - and less than PostgreSQL on other platforms. (Both this and the previous post talk about server-side support, having support client-side in libpq and ODBC is obviously important)&lt;/p&gt;

&lt;p&gt;That said, I am now happy to say that with the effort of several people, it looks like we now have basic 64-bit support for PostgreSQL on Windows. During the past couple of weeks I have cleaned up and extended the patch from Tsutomu Yamada, which in itself builds on the work of several others, and applied it to cvs. As of today, you can build and run PostgreSQL on 64-bit Windows from the official repository.&lt;/p&gt;

&lt;p&gt;This is obviously just the beginning. Unfortunately, Windows in general seems to be lagging behind quite severely on the 64-bit front, and this appears to be particularly true of the open source libraries. I&#039;ve so far been unable to find 64-bit builds of many of the libraries we rely on for full functionality (gettext, zlib, libxml, libxslt, libiconv, tcl, uuid). While in theory support for these things should show up as soon as they are available, that&#039;s obviously not tested. If you know where I can download complete 64-bit binaries (including .lib and .h files for development) of any of these projects, please let me know.&lt;/p&gt;

&lt;p&gt;Also, this is not very well tested yet. It passes all the PostgreSQL regression tests. That&#039;s pretty much all the tests I&#039;ve been running on it. This is obviously a point where a lot of people can help - so &lt;strong&gt;please do&lt;/strong&gt;. I have made a set of pre-alpha binaries available &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=198&amp;amp;entry_id=160&quot; title=&quot;http://www.hagander.net/pgsql/postgresql-8.5-pre-alpha-win64.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.hagander.net/pgsql/postgresql-8.5-pre-alpha-win64.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;here&lt;/a&gt;. This is a bare-bones build of cvs head earlier today - things like OpenSSL that do have 64-bit binaries available is also disabled. It comes with no installer - just unzip into a directory, and use the &lt;i&gt;initdb&lt;/i&gt; and &lt;i&gt;pg_ctl&lt;/i&gt; commands directly. So if you have a 64-bit environment, please download and test this against your application!&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Sun, 10 Jan 2010 16:21:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/160-guid.html</guid>
    <category>8.5</category>
<category>postgresql</category>
<category>win64</category>
<category>windows</category>

</item>
<item>
    <title>PostgreSQL security releases out</title>
    <link>http://blog.hagander.net/archives/159-PostgreSQL-security-releases-out.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/159-PostgreSQL-security-releases-out.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=159</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=159</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;As you can &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=195&amp;amp;entry_id=159&quot; title=&quot;http://www.postgresql.org/about/news.1170&quot;  onmouseover=&quot;window.status=&#039;http://www.postgresql.org/about/news.1170&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;see&lt;/a&gt;, PostgreSQL has just released new updated versions, which include security fixes. They also contain other critical bug fixes, so even if you are not directly affected by the security issues, &lt;strong&gt;plan an upgrade as soon as possible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One of the security issues that have been patched deal with NULL prefixes in SSL certificate names, a vulnerability that is basically the same one that have surfaced in a lot of different products this autumn, for example in the Mozilla suite of products. There is not really space enough to properly discuss the implications this has in a PostgreSQL environment in the release notes, so I&#039;ll try to elaborate some here - given that I wrote the fix for it.&lt;/p&gt;

&lt;p&gt;First of all, a quick explanation of what the problem is. PostgreSQL uses OpenSSL to deal with certificates. Prior to the fixed version, we just asked OpenSSL for the name of the certificate, got back a string, and used this one. Now, if you know C coding, you know that a string is terminated by a NULL character. The bug in PostgreSQL is that we did not check the return value from this function, and make sure it returned the same value as the length of the returned string. This means that somebody could embed a NULL value in the certificate, and we would incorrectly parse and validate only the part that was &lt;strong&gt;before&lt;/strong&gt; the NULL value. For example, if someone managed to get a certificate with the common name set to &amp;quot;postgresql.bank.com\0attacker.com&amp;quot;, PostgreSQL would match this certificate against &amp;quot;postgresql.bank.com&amp;quot; (or &amp;quot;*.bank.com&amp;quot;), which is not correct. With the fix, the certificate will be &lt;strong&gt;rejected&lt;/strong&gt; completely.&lt;/p&gt;

&lt;p&gt;It is important to know that in order to make use of this vulnerability, the attacker needs to convince a &lt;strong&gt;trusted CA&lt;/strong&gt; to sign such a certificate - which is quite obviously malicious. If the attacker cannot get the CA to hand this out, PostgreSQL will reject the certificate before we even get this far. It is arguably also a &lt;strong&gt;bug in the CA handling&lt;/strong&gt; (technical or procedural) to even hand out such a certificate, and that bug need to be exploited &lt;strong&gt;before&lt;/strong&gt; the one in PostgreSQL can be.&lt;/p&gt;

&lt;p&gt;In the vast majority of cases, if not all, where PostgreSQL is deployed and actually using certificate validation, the certificates will be handed out by a trusted &lt;strong&gt;local CA&lt;/strong&gt;. In which case, exploiting this vulnerability becomes much harder. This scenario is significantly different from the original scenario this bug was discovered in, which is the web browser. In the web browser case, the browser already trusts a large number of external CAs by default. PostgreSQL will trust &lt;strong&gt;no&lt;/strong&gt; CAs by default (unless you are doing a debian install, in which case they put some default CAs in there - this is another reason why this is a really bad idea from a security perspective). PostgreSQL also does not prompt the user with a potentially incorrect name field on the certificate asking if this is ok or not - it will just reject the certificate if it doesn&#039;t match (correctly or incorrectly), closing another attack venue. So the bug is really only significant if you can&#039;t trust your CA - but the whole point of the CA is that it is a trusted entity...&lt;/p&gt;

&lt;p&gt;PostgreSQL 8.4 is the first version to properly support &lt;i&gt;certificate name validation&lt;/i&gt;, and also the first version to support &lt;i&gt;client certificate authentication&lt;/i&gt;, both of which are vulnerable to this bug, &lt;strong&gt;neither&lt;/strong&gt; of which is enabled by default. However, previous versions are also indirectly vulnerable, because they exposed the CN field of the certificate to the application for further validation. So you could have a stored procedure checking the client certificate, or just the libpq application checking the server certificate, even in earlier versions. And given the API structure, there was no way for these outside processes to know if they were being fooled or not. So if you are using an application that makes use of this on previous versions of PostgreSQL, you still need the patch - there is no way to fix the bug from the application.&lt;/p&gt;

&lt;p&gt;The summary of this post is that this vulnerability is a &lt;strong&gt;lot less serious&lt;/strong&gt; in PostgreSQL than in many other systems that had the issue. That doesn&#039;t mean it&#039;s not there, and that it should be (and have been) fixed. But it means that this vulnerability alone is likely not reason enough to rush an upgrade on your production systems - most likely you&#039;re not affected by it. On the &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=196&amp;amp;entry_id=159&quot; title=&quot;http://www.postgresql.org/support/security&quot;  onmouseover=&quot;window.status=&#039;http://www.postgresql.org/support/security&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;PostgreSQL security page&lt;/a&gt; it is tagged with classification &lt;strong&gt;A&lt;/strong&gt;, which is the highest. This is more an indication that the system we&#039;re using for classification really doesn&#039;t take these things into consideration - something we will look into for the future.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Mon, 14 Dec 2009 15:38:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/159-guid.html</guid>
    <category>postgresql</category>
<category>security</category>

</item>
<item>
    <title>Transferring slonified databases without slony</title>
    <link>http://blog.hagander.net/archives/158-Transferring-slonified-databases-without-slony.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/158-Transferring-slonified-databases-without-slony.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=158</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=158</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;If you back up your Slony database with pg_dump, and try to reload it on a different machine (say transfer from a production system to a testing or benchmarking system), you&#039;ve probably come across this problem more than once.&lt;/p&gt;

&lt;p&gt;The dump will include all the Slony objects, with functions and triggers, that you simply cannot reload on a different machine - unless that machine also has Slony installed, and in the same way. A common way to do this is to just do a restore and ignore the errors - but if your database has lots of objects in it, that makes it very hard to spot &lt;strong&gt;actual&lt;/strong&gt; errors - I always prefer to run with &lt;strong&gt;-1&lt;/strong&gt; and/or &lt;strong&gt;-e&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The first step to fix the problem is to exclude the Slony schema when dumping or restoring. That gets rid of most of the problem, but not all. There are still triggers in the main schemas that reference functions in the Slony schema, and now &lt;strong&gt;they&lt;/strong&gt; will fail. Luckily, &lt;strong&gt;pg_restore&lt;/strong&gt; has functionality to generate a table of contents from a dump, and then you can edit this table of contents file to exclude the triggers specifically. If your database isn&#039;t too complicated, you can easily script this.&lt;/p&gt;

&lt;p&gt;Which brings me to the point of this post. It&#039;s actually very simple to script this, as long as the name of your slony schema doesn&#039;t conflict with other objects in your database (including the underscore). This is something that I know a lot of people keep doing manually (given the number of questions I hear about it when I say you should always use -e when restoring, for example). So here is a small semi-generic script that will do this for you - sed to the rescue. It simply comments out all the references to your slony schema.&lt;/p&gt;

 &lt;br /&gt;&lt;a href=&quot;http://blog.hagander.net/archives/158-Transferring-slonified-databases-without-slony.html#extended&quot;&gt;Continue reading &quot;Transferring slonified databases without slony&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 14 Dec 2009 13:16:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/158-guid.html</guid>
    
</item>
<item>
    <title>Feedback from pgday.eu</title>
    <link>http://blog.hagander.net/archives/157-Feedback-from-pgday.eu.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/157-Feedback-from-pgday.eu.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=157</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=157</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve finally had the time to summarize the feedback we received from pgday.eu.&lt;/p&gt;

&lt;p&gt;We received feedback from about 35 people, which is obviously way less than we were hoping for. Ideas for how to improve this for next time are very welcome! This also means that the figures we have are not very exact - but they should give a general hint about what our attendees thought.&lt;/p&gt;

&lt;p&gt;I just sent out the individual session feedback summaries to each individual speaker. These will not be published - it&#039;s of course fine for each speaker to publish his own feedback if he wants to, but the conference organizers will not publish the detailed per-session data.&lt;/p&gt;

&lt;p&gt;The statistics we do have show that most of our speakers did a very good job, and that the attendees were in general very happy with the sessions. We have also received a fairly large amount of comments - both to the conference and the speakers - which will help us improve specific points for next year!&lt;/p&gt;

&lt;p&gt;I&#039;ll show a couple of graphs here with the total across &lt;i&gt;all&lt;/i&gt; sessions and speakers. In these graphs, 5 is the highest score and 1 is the lowest.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://photos.smugmug.com/photos/724967910_MtQ4Q-O.png&quot; width=&quot;400&quot; height=&quot;200&quot; alt=&quot;724967910_MtQ4Q-O.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The attendees also seemed to be very happy with our speakers, which is something I&#039;m very happy to hear about. It&#039;s also good to see that almost nobody felt the speakers didn&#039;t know very well what they were talking about - always a worry with a conference that has so many experienced community people attending.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://photos.smugmug.com/photos/724967906_c8gwb-O.png&quot; width=&quot;400&quot; height=&quot;200&quot; alt=&quot;724967906_c8gwb-O.png&quot; /&gt; &lt;img src=&quot;http://photos.smugmug.com/photos/724967905_Ga5rN-O.png&quot; width=&quot;400&quot; height=&quot;200&quot; alt=&quot;724967905_Ga5rN-O.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Actually trying to figure out which speaker is best using this data is very difficult. But here&#039;s a list of the top speakers based on &lt;i&gt;speaker quality&lt;/i&gt;, who had more than 5 ratings on their talks. The list includes all speakers with an average score of at least 3.5. There are a lot more hovering around that line, but there has to be a cutoff somewhere... Again note that there are still not that many ratings to consider, so values are pretty unstable. I&#039;ve included the standard deviation as well to make sure this is visible.&lt;/p&gt;



&lt;table&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;Place&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Speaker&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Score&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Stddev&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Num&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;1&lt;/td&gt;
        &lt;td&gt;Gavin M. Roy&lt;/td&gt;
        &lt;td&gt;4.9&lt;/td&gt;
        &lt;td&gt;0.5&lt;/td&gt;
        &lt;td&gt;18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;2&lt;/td&gt;
        &lt;td&gt;Guillaume Lelarge&lt;/td&gt;
        &lt;td&gt;4.9&lt;/td&gt;
        &lt;td&gt;0.4&lt;/td&gt;
        &lt;td&gt;7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;3&lt;/td&gt;
        &lt;td&gt;Robert Hodges&lt;/td&gt;
        &lt;td&gt;4.8&lt;/td&gt;
        &lt;td&gt;0.4&lt;/td&gt;
        &lt;td&gt;13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;4&lt;/td&gt;
        &lt;td&gt;Magnus Hagander&lt;/td&gt;
        &lt;td&gt;4.8&lt;/td&gt;
        &lt;td&gt;0.4&lt;/td&gt;
        &lt;td&gt;20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;5&lt;/td&gt;
        &lt;td&gt;Jean-Paul Argudo&lt;/td&gt;
        &lt;td&gt;4.8&lt;/td&gt;
        &lt;td&gt;0.5&lt;/td&gt;
        &lt;td&gt;8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;6&lt;/td&gt;
        &lt;td&gt;Joshua D. Drake&lt;/td&gt;
        &lt;td&gt;4.6&lt;/td&gt;
        &lt;td&gt;0.7&lt;/td&gt;
        &lt;td&gt;9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;7&lt;/td&gt;
        &lt;td&gt;Simon Riggs&lt;/td&gt;
        &lt;td&gt;4.6&lt;/td&gt;
        &lt;td&gt;0.6&lt;/td&gt;
        &lt;td&gt;17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;8&lt;/td&gt;
        &lt;td&gt;Dimitri Fontaine&lt;/td&gt;
        &lt;td&gt;4.5&lt;/td&gt;
        &lt;td&gt;0.5&lt;/td&gt;
        &lt;td&gt;14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;9&lt;/td&gt;
        &lt;td&gt;Greg Stark&lt;/td&gt;
        &lt;td&gt;4.3&lt;/td&gt;
        &lt;td&gt;0.5&lt;/td&gt;
        &lt;td&gt;8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;10&lt;/td&gt;
        &lt;td&gt;Vincent Moreau&lt;/td&gt;
        &lt;td&gt;4.1&lt;/td&gt;
        &lt;td&gt;0.6&lt;/td&gt;
        &lt;td&gt;8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;11&lt;/td&gt;
        &lt;td&gt;Mark Cave-Ayland&lt;/td&gt;
        &lt;td&gt;4.0&lt;/td&gt;
        &lt;td&gt;0.6&lt;/td&gt;
        &lt;td&gt;11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;12&lt;/td&gt;
        &lt;td&gt;David Fetter&lt;/td&gt;
        &lt;td&gt;3.9&lt;/td&gt;
        &lt;td&gt;1.1&lt;/td&gt;
        &lt;td&gt;9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;13&lt;/td&gt;
        &lt;td&gt;Gabriele Bartolini&lt;/td&gt;
        &lt;td&gt;3.7&lt;/td&gt;
        &lt;td&gt;1.0&lt;/td&gt;
        &lt;td&gt;15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;14&lt;/td&gt;
        &lt;td&gt;Heikki Linnakangas&lt;/td&gt;
        &lt;td&gt;3.6&lt;/td&gt;
        &lt;td&gt;0.7&lt;/td&gt;
        &lt;td&gt;9&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;All of these are clearly very good numbers.&lt;/p&gt;

&lt;p&gt;So once again, a big thanks to our speakers for their good work. And also a very big thanks to those who did fill out the session feedback forms - your input is very valuable!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Yes, these graphs were made with a python script calling the Google Charts API. Does anybody know of a native python library that will generate &lt;i&gt;goodlooking&lt;/i&gt; charts without having to call a remote web service?&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Fri, 27 Nov 2009 11:46:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/157-guid.html</guid>
    <category>conferences</category>
<category>pgday</category>
<category>pgeu</category>
<category>postgresql</category>

</item>
<item>
    <title>My pgday.eu pictures are up</title>
    <link>http://blog.hagander.net/archives/156-My-pgday.eu-pictures-are-up.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/156-My-pgday.eu-pictures-are-up.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=156</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=156</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve finally gotten around to uploading my pictures from &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=193&amp;amp;entry_id=156&quot; title=&quot;http://2009.pgday.eu&quot;  onmouseover=&quot;window.status=&#039;http://2009.pgday.eu&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;PGDay.EU 2009&lt;/a&gt; to &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=194&amp;amp;entry_id=156&quot; title=&quot;http://mha.smugmug.com/Conferences/PostgreSQL/PGDayEU-2009/&quot;  onmouseover=&quot;window.status=&#039;http://mha.smugmug.com/Conferences/PostgreSQL/PGDayEU-2009/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;my smugmug gallery&lt;/a&gt;.&lt;/p&gt;

&lt;img src=&quot;http://mha.smugmug.com/Conferences/PostgreSQL/PGDayEU-2009/IMG4170/708219561_qfkeu-L.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;708219561_qfkeu-L.jpg&quot; /&gt;&lt;p&gt;Clearly the conference was tiring, and we all needed a rest...  (yes, this was during JD&#039;s talk)&lt;/p&gt;

&lt;p&gt;And as the picture says, don&#039;t forget to submit your feedback - the site is still open for that!&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Wed, 11 Nov 2009 20:09:29 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/156-guid.html</guid>
    <category>Conferences</category>
<category>PostgreSQL</category>
<category>pgday</category>
<category>pictures</category>
<category>postgresql</category>

</item>
<item>
    <title>PGDay.EU 2009 - it's a wrap</title>
    <link>http://blog.hagander.net/archives/155-PGDay.EU-2009-its-a-wrap.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/155-PGDay.EU-2009-its-a-wrap.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=155</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=155</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;I&#039;m currently sitting on my flight home from Paris CDG, after a couple of very hectic days. It&#039;s going to be a couple of days (which in reality is going to drag out into a couple of weeks due to other work engagements and then travel for the JPUG conference) before it&#039;ll be possible to completely evaluate the conference and things around it, but here&#039;s what I have so far.&lt;/p&gt;

&lt;p&gt;I&#039;m going to leave the evaluation of the talks themselves to somebody else. There were many others of the &amp;quot;regular PostgreSQL bloggers&amp;quot; present at the conference and we&#039;ve already seen some posts around it. Hopefully there will be more, both in French and English. If you are blogging about this and your blog isn&#039;t already up on &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=184&amp;amp;entry_id=155&quot; title=&quot;http://planet.postgresql.org&quot;  onmouseover=&quot;window.status=&#039;http://planet.postgresql.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;Planet PostgreSQL&lt;/a&gt;, please consider &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=185&amp;amp;entry_id=155&quot; title=&quot;http://planet.postgresql.org/add.html&quot;  onmouseover=&quot;window.status=&#039;http://planet.postgresql.org/add.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;adding it&lt;/a&gt; so that the community at large gets notification of your posts.&lt;/p&gt;

 &lt;br /&gt;&lt;a href=&quot;http://blog.hagander.net/archives/155-PGDay.EU-2009-its-a-wrap.html#extended&quot;&gt;Continue reading &quot;PGDay.EU 2009 - it&#039;s a wrap&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 08 Nov 2009 20:45:54 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/155-guid.html</guid>
    <category>conferences</category>
<category>pgday</category>
<category>postgresql</category>

</item>
<item>
    <title>PGDay.EU day one</title>
    <link>http://blog.hagander.net/archives/154-PGDay.EU-day-one.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/154-PGDay.EU-day-one.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=154</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=154</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;img src=&quot;http://photos.smugmug.com/photos/704919308_DW2Vc-M.jpg&quot; align=&quot;right&quot; width=&quot;600&quot; height=&quot;400&quot; alt=&quot;704919308_DW2Vc-M.jpg&quot; /&gt;&lt;p&gt;So, day one is almost finished, when it comes to the conference itself - and then it&#039;s off to the EnterpriseDB evening party. A quick summary of the day is: *awesome*.&lt;/p&gt;

&lt;p&gt;Going into a little more detail, the day started with us actually getting up painfully early. Got to ParisTech in the morning, right as they opened up our room. I have to say the facilities at ParisTech have been great - the rooms are in great shape, perfect size, and all the A/V equipment is working perfectly. (Yes, there is a slight flicker on one of the projectors, but it&#039;s not bad).&lt;/p&gt;

&lt;p&gt;I did the intro section with Jean-Paul, and there&#039;s really not much to say about that. We (well, I) forgot to add a slide about the &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=183&amp;amp;entry_id=154&quot; title=&quot;http://2009.pgday.eu/feedback&quot;  onmouseover=&quot;window.status=&#039;http://2009.pgday.eu/feedback&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;feedback&lt;/a&gt; - oops. I bet that&#039;s one reason we don&#039;t have as much feedback entered yet as we&#039;d like.&lt;/p&gt;

&lt;p&gt;Simon took over with a keynote, which was very good. Simon is a very good speaker, and he found a good balance between technical and non-technical talks. It was a nice way to kick off the conference. At this time, we had somewhere between 125-150 people had shown up, which is definitely not bad.&lt;/p&gt;

&lt;p&gt;I half-followed the English track after that, with talks about PostGIS and Data Warehousing, which were both very good talks. Also spent some time in the organization, which has really worked pretty smoothly. We&#039;ve had a few minor issues, but they were all solved quickly.&lt;/p&gt;

&lt;p&gt;Lunch was *fantastic*. Many thanks to our great caterers who served us an amazing lunch, with good organization, and more than enough food. Couldn&#039;t be better!&lt;/p&gt;

&lt;img src=&quot;http://photos.smugmug.com/photos/704919423_GYi3H-M.jpg&quot; align=&quot;left&quot; width=&quot;600&quot; height=&quot;400&quot; alt=&quot;704919423_GYi3H-M.jpg&quot; /&gt;&lt;p&gt;Watched Gavin&#039;s talk on scalability after lunch, which is always a good one. After that I had my own talk which went at least Ok, though I did finish a bit early. After that it was off to a pgadmin developer meeting, which is where I am now.&lt;/p&gt;

&lt;p&gt;So I&#039;d better go now, so I don&#039;t miss out on the activities.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Fri, 06 Nov 2009 15:48:13 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/154-guid.html</guid>
    <category>Conferences</category>
<category>PostgreSQL</category>
<category>pgday</category>
<category>postgresql</category>

</item>
<item>
    <title>80 pages about PostgreSQL!</title>
    <link>http://blog.hagander.net/archives/153-80-pages-about-PostgreSQL!.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/153-80-pages-about-PostgreSQL!.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=153</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=153</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;I was just told that the latest edition of &lt;i&gt;GNU/Linux Magazine&lt;/i&gt; in France is &lt;strong&gt;dedicated&lt;/strong&gt; to PostgreSQL. A full 80 pages about your favorite RDBMS! I&#039;m told all the articles are written by our own &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=181&amp;amp;entry_id=153&quot; title=&quot;http://blog.guillaume.lelarge.info/&quot;  onmouseover=&quot;window.status=&#039;http://blog.guillaume.lelarge.info/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;Guillaume Lelarge&lt;/a&gt;. Well done, Guillaume!&lt;/p&gt;

&lt;p&gt;Unfortunately for those of us who don&#039;t speak the language, the whole thing is in French. But if you do speak French, it&#039;s probably well worth checking out. There&#039;s a &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=182&amp;amp;entry_id=153&quot; title=&quot;http://ed-diamond.com/feuille_lmhs44/index.html&quot;  onmouseover=&quot;window.status=&#039;http://ed-diamond.com/feuille_lmhs44/index.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;preview&lt;/a&gt; available online, and the magazine should be available in stores. Guillaume has also told me the contents will be available downloaded later on, but not for a few months.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Wed, 07 Oct 2009 20:02:02 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/153-guid.html</guid>
    <category>postgresql</category>
<category>postgresql press</category>

</item>
<item>
    <title>PGDay.EU open for business</title>
    <link>http://blog.hagander.net/archives/152-PGDay.EU-open-for-business.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/152-PGDay.EU-open-for-business.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=152</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=152</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;Yesterday we announced the &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=179&amp;amp;entry_id=152&quot; title=&quot;http://2009.pgday.eu/schedule&quot;  onmouseover=&quot;window.status=&#039;http://2009.pgday.eu/schedule&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;schedule&lt;/a&gt; for PGDay.EU 2009. The Friday will have one track in English and one in French, and the Saturday will have *two* tracks in English and one in French. There are a lot of good talks scheduled - I wish I could trust my French enough to go see a couple of those as well...&lt;/p&gt;

&lt;p&gt;We are also now open for &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=180&amp;amp;entry_id=152&quot; title=&quot;http://2009.pgday.eu/register&quot;  onmouseover=&quot;window.status=&#039;http://2009.pgday.eu/register&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;registration&lt;/a&gt;. The cost of the conference is from €60 for a full price two day entry with discounts for single-day and for students. See the registration page for details. While we expect to be able to accommodate all interested people, if we are unable to do so those that register first will obviously be the ones we can take. We also prefer that you register as soon as you can if you know you&#039;re coming, since that makes our planning much easier.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Tue, 29 Sep 2009 16:32:16 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/152-guid.html</guid>
    <category>PostgreSQL</category>
<category>conferences</category>
<category>pgeu</category>
<category>postgresql</category>

</item>
<item>
    <title>Testing PostgreSQL patches on Windows using Amazon EC2</title>
    <link>http://blog.hagander.net/archives/151-Testing-PostgreSQL-patches-on-Windows-using-Amazon-EC2.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/151-Testing-PostgreSQL-patches-on-Windows-using-Amazon-EC2.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=151</wfw:comment>

    <slash:comments>7</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=151</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;Many people who develop patches for PostgreSQL don&#039;t have access to Windows machines to test their patches on. Particularly not with complete build environments for the MSVC build on them. The net result of this is that a fair amount of patches are never tested on Windows until after they are committed. For most patches this doesn&#039;t actually matter, since it&#039;s changes that don&#039;t deal with anything platform specific other than that which is already taken care of by our build system. But Windows is not Posix, so the platform differences are generally larger than between the different Unix platforms PostgreSQL builds on, and in MSVC the build system is completely different. In a non-trivial number of cases it ends up with breaking the &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=173&amp;amp;entry_id=151&quot; title=&quot;http://pgbuildfarm.org&quot;  onmouseover=&quot;window.status=&#039;http://pgbuildfarm.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;buildfarm&lt;/a&gt; until somebody with access to a Windows build environment can fix it. Lucky, we have a number of machines running on the buildfarm with Windows on them, so we do catch these things long before release.&lt;/p&gt;

&lt;p&gt;There are a couple of reasons why it&#039;s not easy for developers to have a Windows machine ready for testing, even a virtual one. For one, it requires a Windows license. In this case the same problem with availability for testing exists for other proprietary platforms such as for example Mac OSX, but it&#039;s different from all the free Linux/Unix platforms available. Second, setting up the build environment is quite complex - not at all as easy as on the most common Linux platforms for example. This second point is particularly difficult for those not used to Windows.&lt;/p&gt;

&lt;p&gt;A third reason I noticed myself was that running the builds, and regression tests, is very very slow at least on my laptop using VirtualBox. It works, but it takes ages. For this reason, a while back I started investigating using &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=174&amp;amp;entry_id=151&quot; title=&quot;http://aws.amazon.com/ec2/&quot;  onmouseover=&quot;window.status=&#039;http://aws.amazon.com/ec2/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;Amazon EC2&lt;/a&gt; to do my Windows builds on, for my own usage. Turns out this was a very good solution to my problem - the time for a complete rebuild on a typical EC2 instance is around 7 minutes, whereas it can easily take over 45 minutes on my laptop.&lt;/p&gt;

&lt;p&gt;Now, EC2 provides a pretty nice way to create what&#039;s called an AMI (Amazon Machine Image) that can be shared. Using these facilities, I have created an AMI that contains Windows plus a complete PostgreSQL build environment. Since this AMI has been made public, anybody who wants to can boot up an &lt;i&gt;instance&lt;/i&gt; of it to run tests. Each of these instances are completely independent of each other - the AMI only provides a common starting point.&lt;/p&gt;

&lt;p&gt;I usually run these on a &lt;i&gt;medium&lt;/i&gt; size Amazon instance. The cost for such an instance is, currently, &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=178&amp;amp;entry_id=151&quot; title=&quot;http://aws.amazon.com/ec2/#pricing&quot;  onmouseover=&quot;window.status=&#039;http://aws.amazon.com/ec2/#pricing&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;$0.30 per hour&lt;/a&gt; that the instance is running. The big advantage here is that this &lt;i&gt;includes&lt;/i&gt; the Windows license. That makes it a very cost-effective way to do quick builds and tests on Windows.&lt;/p&gt;

&lt;p&gt;Read on for a full step-by-step instruction on how to get started with this AMI (screenshot overload warning).&lt;/p&gt;

 &lt;br /&gt;&lt;a href=&quot;http://blog.hagander.net/archives/151-Testing-PostgreSQL-patches-on-Windows-using-Amazon-EC2.html#extended&quot;&gt;Continue reading &quot;Testing PostgreSQL patches on Windows using Amazon EC2&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Thu, 03 Sep 2009 14:48:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/151-guid.html</guid>
    <category>amazon</category>
<category>build</category>
<category>cloud</category>
<category>ec2</category>
<category>git</category>
<category>postgresql</category>
<category>windows</category>

</item>
<item>
    <title>Some planet updates</title>
    <link>http://blog.hagander.net/archives/150-Some-planet-updates.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/150-Some-planet-updates.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=150</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=150</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;I found myself unexpected with a day home with nothing but boring chores to do really, so I figured a good way to get out of doing those would be to do some work on the backlog of things that I&#039;ve been planning to do for &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=169&amp;amp;entry_id=150&quot; title=&quot;http://planet.postgresql.org&quot;  onmouseover=&quot;window.status=&#039;http://planet.postgresql.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;planet.postgresql.org&lt;/a&gt;. I realize that my blog is turning into a release-notes-for-planet lately since I haven&#039;t had much time to blog about other things. So I may as well confess right away that one reason to post is to make sure the updates I deployed actually work...&lt;/p&gt;

&lt;p&gt;This round of updates have been around the &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=170&amp;amp;entry_id=150&quot; title=&quot;http://twitter.com/planetpostgres&quot;  onmouseover=&quot;window.status=&#039;http://twitter.com/planetpostgres&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;twitter&lt;/a&gt; integration:&lt;/p&gt;


&lt;ul&gt;
    &lt;li&gt;Since it turned out that a lot of people didn&#039;t actually know there &lt;strong&gt;was&lt;/strong&gt; a twitter integration for planet, it is now linked clearly from the planet frontpage.&lt;/li&gt;
    &lt;li&gt;The twitter integration scripts (originally by &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=171&amp;amp;entry_id=150&quot; title=&quot;http://chesnok.com/daily/&quot;  onmouseover=&quot;window.status=&#039;http://chesnok.com/daily/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;Selena&lt;/a&gt; have been rewritten to work directly with our database of posts instead of pulling back in the RSS feed that the system had just generated, and also to keep the status of posts in the database. With luck, this will fix the very rare case where posts sometimes got dropped, and it made the code a lot simpler.&lt;/li&gt;
    &lt;li&gt;The posts made by the system will refer to the twitter username of the blog owner, if it&#039;s registered. For your own blogs, you can see what username is registered by going to &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=172&amp;amp;entry_id=150&quot; title=&quot;http://planet.postgresql.org/register/&quot;  onmouseover=&quot;window.status=&#039;http://planet.postgresql.org/register/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;the registration site&lt;/a&gt;. We&#039;ve added some of the twitter usernames we know about - if yours is not listed, please let us know at planet@postgresql.org what twitter username to connect with what blog url.&lt;/li&gt;
    &lt;li&gt;The system has been prepared to pull out some usage statistics, but nothing is actually done with that yet.&lt;/li&gt;
&lt;/ul&gt;

 
    </content:encoded>

    <pubDate>Sun, 30 Aug 2009 13:24:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/150-guid.html</guid>
    <category>planet</category>
<category>postgresql</category>
<category>twitter</category>

</item>
<item>
    <title>Help us test a patch for the Win32 shared memory issue</title>
    <link>http://blog.hagander.net/archives/149-Help-us-test-a-patch-for-the-Win32-shared-memory-issue.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/149-Help-us-test-a-patch-for-the-Win32-shared-memory-issue.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=149</wfw:comment>

    <slash:comments>14</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=149</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;We currently have a &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=166&amp;amp;entry_id=149&quot; title=&quot;http://archives.postgresql.org/pgsql-hackers/2009-07/msg01419.php&quot;  onmouseover=&quot;window.status=&#039;http://archives.postgresql.org/pgsql-hackers/2009-07/msg01419.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;patch&lt;/a&gt; sitting in the queue from Tsutomu Yamada with modifications from me, all based on an idea from Trevor Talbot some time back. (That should do it for credits) It tries to pre-reserve the shared memory region during DLL initialization, and then releases it just in time to reallocate it as shared memory. (that will do for technical detail for now) This should hopefully fix the infamous &amp;quot;failed to re-attach to shared memory&amp;quot; errors we&#039;ve been seeing on Windows.&lt;/p&gt;

&lt;p&gt;We need your help to test it!&lt;/p&gt;

&lt;p&gt;We need help both from people who &lt;i&gt;are&lt;/i&gt; experiencing the problem - to see if it solves it, and from people who are &lt;i&gt;not&lt;/i&gt; experiencing it - to make sure it doesn&#039;t cause any new problems.&lt;/p&gt;

&lt;p&gt;Dave has built binaries for &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=167&amp;amp;entry_id=149&quot; title=&quot;http://developer.pgadmin.org/~dpage/postgres_exe_virtualalloc-8_3.zip&quot;  onmouseover=&quot;window.status=&#039;http://developer.pgadmin.org/~dpage/postgres_exe_virtualalloc-8_3.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;8.3.7&lt;/a&gt; and &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=168&amp;amp;entry_id=149&quot; title=&quot;http://developer.pgadmin.org/~dpage/postgres_exe_virtualalloc-8_4.zip&quot;  onmouseover=&quot;window.status=&#039;http://developer.pgadmin.org/~dpage/postgres_exe_virtualalloc-8_4.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;8.4.0&lt;/a&gt;. To test the patch, stop your server, take a backup copy of your postgres.exe file, and replace it with the file from the appropriate ZIP file before. Restart the server, and see if it works!&lt;/p&gt;

&lt;p&gt;Once you have tested, please report your success to the pgsql-hackers list, or directly to me and I&#039;ll tally it up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: These patched binaries will only work if you installed from the &lt;i&gt;One-click installer&lt;/i&gt;. Specifically, they will not work if you installed from the &lt;i&gt;MSI installer&lt;/i&gt; due to a mismatch in the configuration option for integer vs floating point datetime handling.&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Wed, 22 Jul 2009 15:16:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/149-guid.html</guid>
    <category>postgresql</category>

</item>
<item>
    <title>Planet updates</title>
    <link>http://blog.hagander.net/archives/148-Planet-updates.html</link>
            <category>PostgreSQL</category>
    
    <comments>http://blog.hagander.net/archives/148-Planet-updates.html#comments</comments>
    <wfw:comment>http://blog.hagander.net/wfwcomment.php?cid=148</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.hagander.net/rss.php?version=2.0&amp;type=comments&amp;cid=148</wfw:commentRss>
    

    <author>nospam@example.com (Magnus Hagander)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve just deployed a new version of the code that runs &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=162&amp;amp;entry_id=148&quot; title=&quot;http://planet.postgresql.org&quot;  onmouseover=&quot;window.status=&#039;http://planet.postgresql.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;http://planet.postgresql.org&lt;/a&gt;. Most of this code was written by &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=163&amp;amp;entry_id=148&quot; title=&quot;http://www.chesnok.com/daily&quot;  onmouseover=&quot;window.status=&#039;http://www.chesnok.com/daily&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;Selena&lt;/a&gt; and me during the &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=164&amp;amp;entry_id=148&quot; title=&quot;https://blog.hagander.net/archives/143-Getting-started-at-pgcon.html&quot;  onmouseover=&quot;window.status=&#039;https://blog.hagander.net/archives/143-Getting-started-at-pgcon.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;initial days&lt;/a&gt; at PGCon. It just needed some minor polishing, which I didn&#039;t get around to until now. So, the new things are:&lt;/p&gt;

&lt;dl&gt;
    &lt;dt&gt;Support for &lt;i&gt;Team blogs&lt;/i&gt;&lt;/dt&gt;
        &lt;dd&gt;This is just a grouping of existing blogs, not actually something new we parse. The idea is to give some exposure to a team someone works for - for example, a specific PostgreSQL support company.&lt;/dd&gt;
    &lt;dt&gt;Top posters list&lt;/dt&gt;
        &lt;dd&gt;The list of all subscriptions has been replaced with a list of top posters. The list was becoming a bit too large to manage, and didn&#039;t really fill a purpose. And it was hard to integrate nicely with the &lt;i&gt;Team blogs&lt;/i&gt; feature.&lt;/dd&gt;
    &lt;dt&gt;There has also been a bunch of internal changes&lt;/dt&gt;
        &lt;dd&gt;Details available in the git repo on &lt;a href=&quot;http://blog.hagander.net/exit.php?url_id=165&amp;amp;entry_id=148&quot; title=&quot;http://git.postgresql.org&quot;  onmouseover=&quot;window.status=&#039;http://git.postgresql.org&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; onclick=&quot;window.open(this.href, &#039;_blank&#039;); return false;&quot;&gt;http://git.postgresql.org&lt;/a&gt;.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;If you want to make use of the &lt;i&gt;Team blogs&lt;/i&gt; feature, this has unfortunately not been implemented in the admin interface. We (well, me, really) were just a bit too lazy for that. So if you want to make use of it, please just send an email to planet@postgresql.org letting us know what name you want for the team, and which blogs to add to it (these blogs should already be subscribed to planet).&lt;/p&gt;

 
    </content:encoded>

    <pubDate>Tue, 16 Jun 2009 18:43:00 +0000</pubDate>
    <guid isPermaLink="false">http://blog.hagander.net/archives/148-guid.html</guid>
    <category>PostgreSQL</category>
<category>planet</category>
<category>postgresql</category>

</item>

</channel>
</rss>