<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>News and updates from the PostgreSQL Extension Network</description><title>PGXN Blog</title><generator>Tumblr (3.0; @pgxn)</generator><link>http://blog.pgxn.org/</link><item><title>pgxn-utils 0.1.4 is out!</title><description>&lt;p&gt;&lt;em&gt;by Dickson S. Guedes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hi everybody!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m proud to tell you that a new version of &lt;a href="https://github.com/guedes/pgxn-utils"&gt;PGXN Utils&lt;/a&gt; was released with this new features:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Git support&lt;/li&gt;
&lt;li&gt;Templates and custom templates&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pgxnclient.projects.postgresql.org/"&gt;PGXN Client&lt;/a&gt; integration&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Git support&lt;/h2&gt;

&lt;p&gt;You can start a new extension with or without version control. By default &lt;code&gt;pgxn-utils&lt;/code&gt;
supports &lt;a href="http://git-scm.org"&gt;git&lt;/a&gt; but it will not create a repository unless you
use &lt;code&gt;--git&lt;/code&gt; option in the skeleton task.&lt;/p&gt;

&lt;p&gt;You can try:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pgxn-utils skeleton my_cool_versioned_extension --git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When you create a new extension with git support in addition to creating the skeleton,
&lt;code&gt;pgxn-utils&lt;/code&gt; will initialize a git repository and create the initial commit.&lt;/p&gt;

&lt;p&gt;Once you have your extension in a git repository your &lt;code&gt;bundle&lt;/code&gt; will use only the
committed files to create the archive, but if your repository is dirty then &lt;code&gt;pgxn-utils&lt;/code&gt;
will suggest that you to commit or stash your changes before bundling.&lt;/p&gt;

&lt;p&gt;You must be careful with new files not added to repository, because they will &lt;strong&gt;not&lt;/strong&gt;
be archived.&lt;/p&gt;

&lt;h2&gt;Default templates&lt;/h2&gt;

&lt;p&gt;There are three default templates: &lt;code&gt;sql&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt; and &lt;code&gt;fdw&lt;/code&gt;. If you call &lt;code&gt;skeleton&lt;/code&gt; without
specifying a template, &lt;code&gt;sql&lt;/code&gt; is the default. But if your extension will supply some C
modules or you will create a FDW, you can create the extension calling &lt;code&gt;skeleton&lt;/code&gt; with a
&lt;code&gt;--template&lt;/code&gt; option.&lt;/p&gt;

&lt;p&gt;Try:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pgxn-utils skeleton my_cool_c_extension --template=c
$ pgxn-utils skeleton my_cool_fdw_extension --template=fdw
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The templates contain example code and some links to PostgreSQL documentation
that will try to help you to start coding. SQL and C templates contains some test
examples, and the example code will compile and pass &lt;code&gt;make installcheck&lt;/code&gt;.
However, this code is intended to be an example, and you must write your own
tests and code.&lt;/p&gt;

&lt;h2&gt;Custom templates&lt;/h2&gt;

&lt;p&gt;If you don&amp;#8217;t like the templates provided by &lt;code&gt;pgxn-utils&lt;/code&gt; you can create you own.
Just create a directory with at least a &lt;code&gt;META.json&lt;/code&gt; or
&lt;code&gt;META.json.tt&lt;/code&gt; file and then use your directory as argument to the &lt;code&gt;--template&lt;/code&gt;
option.&lt;/p&gt;

&lt;p&gt;To know how create your own template, see the examples in the
&lt;a href="https://github.com/guedes/pgxn-utils/tree/master/lib/pgxn_utils/templates"&gt;templates directory&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;PGXN Client integration&lt;/h2&gt;

&lt;p&gt;If you have &lt;a href="http://pgxnclient.projects.postgresql.org/"&gt;PGXN client&lt;/a&gt; installed you
can change the command line from &lt;code&gt;pgxn-utils some_task&lt;/code&gt; to &lt;code&gt;pgxn some_task&lt;/code&gt; and this
will save you some typing.&lt;/p&gt;

&lt;p&gt;See:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cd /tmp
$ pgxn skeleton --help
PGXN Utils version: 0.1.4
Usage:
  pgxn skeleton extension_name

Options:
      [--git]                            # Initialize a git repository after create the extension
  -a, [--abstract=ABSTRACT]              # Defines a short description to abstract
  -p, [--target=TARGET]                  # Define the target directory
                                         # Default: .
      [--template=TEMPLATE]              # The template that will be used to create the extension. Expected values are: sql, c, fdw
                                         # Default: sql
  -r, [--release-status=RELEASE_STATUS]  # Initial extension's release status
  -d, [--description=DESCRIPTION]        # A long text that contains more information about extension
  -b, [--generated-by=GENERATED_BY]      # Name of extension's generator
  -l, [--license=LICENSE]                # The extension license
  -t, [--tags=one two three]             # Defines extension's tags
  -v, [--version=VERSION]                # Initial version
  -m, [--maintainer=MAINTAINER]          # Maintainer's name &amp;lt;maintainer@email&amp;gt;

Creates an extension skeleton in current directory

$ pgxn skeleton test
      create  test
      create  test/test.control
      create  test/.gitignore
      create  test/.template
      create  test/META.json
      create  test/Makefile
      create  test/README.md
      create  test/doc/test.md
      create  test/sql/test.sql
      create  test/sql/uninstall_test.sql
      create  test/test/expected/base.out
      create  test/test/sql/base.sql

$ cd test/
$ pgxn bundle
         run  make distclean from "."
      create  /tmp/test-0.0.1.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I hope you enjoy this version. &amp;#8220;:)&lt;/p&gt;</description><link>http://blog.pgxn.org/post/21171605888</link><guid>http://blog.pgxn.org/post/21171605888</guid><pubDate>Sun, 15 Apr 2012 14:44:12 -0700</pubDate><category>pgxn</category><category>utils</category><category>automation</category><category>release</category><dc:creator>guediz</dc:creator></item><item><title>Lose USE_PGXS in your Makefiles</title><description>&lt;p&gt;Traditionally, folks have created extensions for PostgreSQL by copying one of the &lt;a href="http://www.postgresql.org/docs/current/static/contrib.html"&gt;contrib modules&lt;/a&gt; and hacking it into something new. One of the things that comes along for the ride is the &lt;code&gt;Makefile&lt;/code&gt; (&lt;a href="http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=contrib/isn/Makefile;hb=HEAD"&gt;example&lt;/a&gt;). As a result, there are a lot of third-party extensions that use the &lt;code&gt;USE_PGXS&lt;/code&gt; variable.&lt;/p&gt;

&lt;p&gt;A bit of background. The core contrib extensions generally rely on a relative path to include the core &lt;code&gt;Makefile&lt;/code&gt;s needed to build the extension. Because they ship with the core distribution, they can generally expect that the core has already been compiled, the necessary &lt;code&gt;Makefile&lt;/code&gt;s have been created, and that they should be built against them. All the assumptions are that the extensions should be built against the source tree in which they are distributed. So there is no need to use &lt;a href="http://www.postgresql.org/docs/current/static/app-pgconfig.html"&gt;&lt;code&gt;pg_config&lt;/code&gt;&lt;/a&gt; to find  &lt;a href="http://www.postgresql.org/docs/current/static/extend-pgxs.html"&gt;PGXS&lt;/a&gt;; it already knows where to find what it needs.&lt;/p&gt;

&lt;p&gt;But as extensions, there is still the possibility that one might want to build them against an existing installation of PostgreSQL, or an older version than the source with which they&amp;#8217;re distributed. So the core hackers provided the &lt;code&gt;USE_PGXS&lt;/code&gt; variable so that one can in effect tell &lt;code&gt;make&lt;/code&gt;, &amp;#8220;Don&amp;#8217;t build against the local source tree, but find PGXS for some other install and build against that, instead.&amp;#8221; It was expected to be exceptional, since most folks would build against the local source tree, and not a big deal to make anyone else build it with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;make USE_PGXS=1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Today things are different. There is a growing ecosystem of third party extensions on &lt;a href="http://pgxn.org/"&gt;PGXN&lt;/a&gt;, &lt;a href="http://pgfoundry.org/"&gt;pgFoundry&lt;/a&gt;, &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;, and &lt;a href="https://bitbucket.org/"&gt;Bitbucket&lt;/a&gt;, and obviously they&amp;#8217;re not distributed with the PostgreSQL core. For these extensions, there is no surrounding PostgreSQL source code to automatically include, so they &lt;em&gt;must&lt;/em&gt; use &lt;code&gt;pg_config&lt;/code&gt; to find PGXS in order build.&lt;/p&gt;

&lt;p&gt;Yet, there are quite a few third-party extensions that nevertheless assume that they are in the &lt;code&gt;contrib&lt;/code&gt; directory of the PostgreSQL source code distribution, and so still have the &lt;code&gt;USE_PGXS&lt;/code&gt; variable. The &lt;a href="http://api.pgxn.org/src/twitter_fdw/twitter_fdw-1.0.0/Makefile"&gt;twitter_ftw 1.0.0&amp;#160;&lt;code&gt;Makefile&lt;/code&gt;&lt;/a&gt; is a recent example. Just like core extensions, it has this code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
else
subdir = contrib/twitter_fdw
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
endif
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Because Hitoshi-san originally copied the &lt;code&gt;Makefile&lt;/code&gt; from a core extension, it still assumes it will be distributed in core by default. And as I said, there are quite a few third-party extensions that exhibit this pattern.&lt;/p&gt;

&lt;p&gt;And now the &lt;a href="http://en.wikipedia.org/wiki/Public_service_announcement"&gt;PSA&lt;/a&gt;: &lt;strong&gt;Please don&amp;#8217;t use &lt;code&gt;USE_PGXS&lt;/code&gt; in PostgreSQL extension &lt;code&gt;Makefile&lt;/code&gt;s.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not only is it unnecessary, it makes no sense for third-party extensions. They should &lt;em&gt;always&lt;/em&gt; assume that they need to use &lt;code&gt;pg_config&lt;/code&gt; to find PGXS. If you have an extension &lt;code&gt;Makefile&lt;/code&gt; with &lt;code&gt;USE_PGXS&lt;/code&gt; like twitter_ftw 1.0.0 did, you should change it to something like this (as Hitoshi-san did in the &lt;a href="http://api.pgxn.org/src/twitter_fdw/twitter_fdw-1.0.1/Makefile"&gt;twitter_ftw 1.0.1&amp;#160;&lt;code&gt;Makefile&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That&amp;#8217;s it. I am asking you to &lt;em&gt;make your &lt;code&gt;Makefile&lt;/code&gt; simpler.&lt;/em&gt;&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;&lt;em&gt;An Aside&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is &lt;em&gt;one&lt;/em&gt; situation in which you might need to include the core contrib &lt;code&gt;Makefile&lt;/code&gt;s. And it&amp;#8217;s pretty unusual. If you need to support PostgreSQL 8.1 or earlier, &lt;code&gt;pg_config&lt;/code&gt; will not be able to tell you where to find PGXS. So users will have to copy the exension source directory into the PostgreSQL source &lt;code&gt;contrib/&lt;/code&gt; directory and build from there. They will need a way to tell &lt;code&gt;make&lt;/code&gt; &lt;em&gt;not&lt;/em&gt; to use PGXS. In this one unusual case, I suggest you add a &lt;code&gt;NO_PGXS&lt;/code&gt; variable. &lt;a href="http://api.pgxn.org/src/pgtap/pgtap-0.90.0/Makefile"&gt;pgTAP&amp;#8217;s &lt;code&gt;Makefile&lt;/code&gt;&lt;/a&gt; provides an example. But honestly, very few extensions need to support PostgreSQL 8.1 (the oldest release currently supported by the core hackers is &lt;em&gt;8.3!&lt;/em&gt;), so make use of this pattern only if absolutely necessary.&lt;/p&gt;

&lt;p&gt;Otherwise, please don&amp;#8217;t use &lt;code&gt;USE_PGXS&lt;/code&gt;.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;If you want a complete guide to creating your extension &lt;code&gt;Makefile&lt;/code&gt;, have a look at the &lt;a href="http://manager.pgxn.org/howto"&gt;PGXN Howto&lt;/a&gt;, which includes some detailed examples that include support for pre- and post-&lt;a href="http://www.postgresql.org/docs/current/static/sql-createextension.html"&gt;&lt;code&gt;CREATE EXTENSION&lt;/code&gt;&lt;/a&gt; support. The &lt;a href="http://www.postgresql.org/docs/current/static/extend-pgxs.html"&gt;PGXS&lt;/a&gt; docs contain additional details about all the &lt;code&gt;Makefile&lt;/code&gt; variables you can use to simplify extension configuration and installation. Check ’em out.&lt;/p&gt;</description><link>http://blog.pgxn.org/post/20908326485</link><guid>http://blog.pgxn.org/post/20908326485</guid><pubDate>Wed, 11 Apr 2012 09:36:00 -0700</pubDate><category>extension</category><category>USE_PGXS</category><category>Makefile</category><category>make</category><category>pg_config</category><category>contrib</category><dc:creator>justatheory</dc:creator></item><item><title>Only Stable Releases are Indexed</title><description>&lt;p&gt;I&amp;#8217;ve had a few reports over the last few months that folks uploaded new extensions to &lt;a href="http://pgxn.org/"&gt;PGXN&lt;/a&gt; but they failed to show up in search results. For example, as of right now, if you &lt;a href="http://pgxn.org/search?q=distinct&amp;amp;in=docs"&gt;search for &amp;#8220;distinct&amp;#8221;&lt;/a&gt;, you get two results, &lt;a href="http://pgxn.org/dist/omnipitr/doc/internals.html"&gt;OmniPITR&lt;/a&gt; and &lt;a href="http://pgxn.org/dist/pgtap/doc/pgtap.html"&gt;pgTAP&lt;/a&gt;. This despite the fact that the recently-released &lt;a href="http://pgxn.org/dist/adaptive_estimator/"&gt;adaptive_estimator&lt;/a&gt; extension is &lt;a href="http://pgxn.org/tag/distinct/"&gt;tagged &amp;#8220;distinct&amp;#8221;&lt;/a&gt;. Author &lt;a href="http://pgxn.org/user/tomasv"&gt;Tomas Vondra&lt;/a&gt; reported this issue, and it took me a couple of days to realize why it wasn&amp;#8217;t showing up.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the reason: Only &amp;#8220;stable&amp;#8221; releases are indexed. The &lt;a href="http://pgxn.org/dist/adaptive_estimator/1.0.0/"&gt;first&lt;/a&gt; and &lt;a href="http://pgxn.org/dist/adaptive_estimator/1.1.0/"&gt;second&lt;/a&gt; adaptive_estimator releases both have their release status set to &amp;#8220;testing&amp;#8221;. The PGXN API only indexes stable releases. The idea behind that is that you want most folks to continue using stable releases while you work on testing new versions. So when users search the site, only the latest stable release will appear in search results. Similarly, installing an extension via the &lt;a href="http://pgxnclient.projects.postgresql.org/"&gt;PGXN client&lt;/a&gt;, prefers the latest stable release by default. If you want the most recent, you have to &lt;a href="http://pgxnclient.projects.postgresql.org/usage.html#pgxn-install"&gt;specify the &lt;code&gt;--unstable&lt;/code&gt; or &lt;code&gt;--testing&lt;/code&gt; option&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, the upshot is, if you want your extension to appear in the full text search results on the PGXN, site, release a stable version.&lt;/p&gt;

&lt;p&gt;That said, I first noticed this issue a while ago, and filed &lt;a href="https://github.com/pgxn/pgxn-api/issues/2"&gt;an issue&lt;/a&gt; with the idea that, if an extension is uploaded that is not stable, but there are no stable versions, then the extension should be indexed, anyway. The idea here is that, when you first upload it, you don&amp;#8217;t have any existing users to keep on a stable release anyway, because there &lt;em&gt;is no stable release.&lt;/em&gt; So perhaps we should go ahead and index it. A non-stable release would only be omitted from the index if there was an existing stable release.&lt;/p&gt;

&lt;p&gt;Thoughts?&lt;/p&gt;</description><link>http://blog.pgxn.org/post/20596200256</link><guid>http://blog.pgxn.org/post/20596200256</guid><pubDate>Fri, 06 Apr 2012 10:02:19 -0700</pubDate><category>release</category><category>status</category><category>release status</category><category>stable</category><category>testing</category><category>unstable</category><category>full text index</category><category>FTI</category><category>search results</category><category>adaptive_estimator</category><dc:creator>justatheory</dc:creator></item><item><title>PGXN Has a New Home</title><description>&lt;p&gt;Day before yesterday, I finally got all of &lt;a href="http://pgxn.org/"&gt;PGXN&lt;/a&gt; moved to a new server. I had been using a small server owned by my company, &lt;a href="http://kineticode.com/"&gt;Kineticode&lt;/a&gt;, and hosted by &lt;a href="http://commandprompt.com/"&gt;Command Prompt&lt;/a&gt;. That was fine for a while, but CMD was needing its rack space back, and what with my &lt;a href="http://justatheory.com/autobiographical/iovationeering.html"&gt;new job&lt;/a&gt;, I was shutting down Kineticode, too. It was time to move PGXN elsewhere.&lt;/p&gt;

&lt;p&gt;For a while, I got a lot of support and assistance towards moving PGXN to a &lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; community server. &lt;a href="http://pgsnake.blogspot.com/"&gt;Dave&lt;/a&gt;, &lt;a href="http://blog.hagander.net/"&gt;Magnus&lt;/a&gt;, and &lt;a href="http://www.kaltenbrunner.cc/blog/"&gt;Stefan&lt;/a&gt; kindly spun up a VM for me, and gave me permission to install Perl modules from &lt;a href="http://cpan.org"&gt;CPAN&lt;/a&gt;, provided I supply them with a script to report to Nagios when Perl modules were out of date, which of course I did. This was necessary because I built PGXN with some pretty recent versions of CPAN modules that are not yet available in Debian stable. I was looking forward to getting things running and integrating with the community authentication service.&lt;/p&gt;

&lt;p&gt;I got the server built, and everything was working reasonably well. Magnus and I were just working out some issues with the proxy server configuration, and I was starting to think about how to migrate the data over. But first, I decided to refactor the Perl module script to use a &lt;a href="https://metacpan.org/module/ExtUtils::Installed"&gt;more efficient implementation&lt;/a&gt;. I fired it off and piped its output to the &lt;code&gt;cpan&lt;/code&gt; utility to just get everything updated. Unfortunately, unlike my first implementation, which reported only on CPAN-installed modules, this version of the script also reported when Debian-installed modules were out-of-date. And since I have my CPAN build configuration set up to remove previous installations, I upgraded all those modules, replacing them with new versions.&lt;/p&gt;

&lt;p&gt;Well, this was a major fuckup on my part. Turns out there&amp;#8217;s no simple way to restore Debian-distributed versions of the modules without rebuilding the entire system. Worse, this was exactly the sort of thing the community sysadmins feared. They have to maintain a &lt;em&gt;lot&lt;/em&gt; of servers. So they naturally prefer that they all be as similar as possible. The new PGXN server had been &lt;em&gt;mostly&lt;/em&gt; similar to what they had before, and Dave and company had been willing to compromise quite a bit to get PGXN going, but I, unfortunately, demonstrated how easy it is to ruin the whole thing.&lt;/p&gt;

&lt;p&gt;So we decided that a community server isn&amp;#8217;t the right place for PGXN. At least not yet. Perhaps in a year or two the Debian distribution will be updated to have all the prerequisites I need. Better yet, maybe someone create a PGXN debian distribution! (Volunteers welcomed.) Then I won&amp;#8217;t have to do anything special and we can try again (without any &lt;code&gt;sudo&lt;/code&gt; privileges for me!). But in the meantime, I still needed to move things.&lt;/p&gt;

&lt;p&gt;Fortunately, &lt;a href="http://depesz.com/"&gt;depesz&lt;/a&gt; came to the rescue. He has a very nice box hosting his blog, &lt;a href="http://explain.depesz.com/"&gt;explain.depesz.com&lt;/a&gt;, and a few other things, and would I like to set things up there? Depesz used &lt;a href="http://www.perlbrew.pl/"&gt;perlbrew&lt;/a&gt; to set up a Perl install just for the PGXN system accounts, meaning I could install any Perl modules I needed without interfering with the system Perl. And each account has its own privileges to run the services it needs (&lt;a href="http://manager.pgxn.org/"&gt;Manager&lt;/a&gt;, &lt;a href="http://api.pgxn.org/"&gt;API&lt;/a&gt;, &lt;a href="http://pgxn.org/"&gt;Site&lt;/a&gt;) without the risk of breaking anything else. A few days after getting access, we had everything set up and ready to go. I pulled the trigger on Monday, and it went of without a hitch.&lt;/p&gt;

&lt;p&gt;My thanks to depesz for the server and all the assistance, not to mention his &lt;a href="http://www.pgxn.org/donors/"&gt;donation&lt;/a&gt;! PGXN now has a very nice home where it can mature.&lt;/p&gt;

&lt;p&gt;And as for the future, I have some thoughts about that, too.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;I&amp;#8217;d like to blog about the migration itself, and how easy it is (and isn&amp;#8217;t) to build PGXN.&lt;/li&gt;
&lt;li&gt;There are &lt;a href="https://github.com/pgxn/pgxn-manager/issues"&gt;some&lt;/a&gt; &lt;a href="https://github.com/pgxn/pgxn-api/issues"&gt;bugs&lt;/a&gt; to be fixed and &lt;a href="https://github.com/pgxn/pgxn-manager/issues"&gt;minor improvements&lt;/a&gt; to be had. Interested in helping out?&lt;/li&gt;
&lt;li&gt;I&amp;#8217;d love to hear your ideas about how to improve PGXN. What would make it better? What doesn&amp;#8217;t work quite right for you now?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And yes, now that this migration is finally done, I expect I&amp;#8217;ll have more time to blog and work on PGXN going foward. Please leave your thoughts and ideas in the comments. This thing is wide open to any kind of idea, and I would greatly appreciate your feedback.&lt;/p&gt;</description><link>http://blog.pgxn.org/post/15710159951</link><guid>http://blog.pgxn.org/post/15710159951</guid><pubDate>Wed, 11 Jan 2012 20:51:04 -0800</pubDate><category>server</category><category>postgresql</category><category>depesz</category><category>community</category><category>migration</category><dc:creator>justatheory</dc:creator></item><item><title>PGXN Client 1.0 Released!</title><description>&lt;p&gt;By Daniele Varrazzo&lt;/p&gt;

&lt;p&gt;Finally, here it is. Well tested, documented, and pampered. With the &lt;a href="http://pgxnclient.projects.postgresql.org/"&gt;PGXN Client&lt;/a&gt; installing extensions from the &lt;a href="http://pgxn.org/"&gt;PGXN Network&lt;/a&gt; is a breeze:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pgxn install semver
$ pgxn load semver
$ psql
=# select 'foo'::semver;
ERROR:  bad semver value 'foo': expected number at foo
LINE 1: select 'foo'::semver;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Error! Meaning: success!&lt;/p&gt;

&lt;p&gt;The number of extensions on PGXN is steadily increasing, so we hope the client will make their adoption even easier.&lt;/p&gt;

&lt;p&gt;The client is now extensible: either writing in Python to reuse some of the other commands implementation or writing new self-contained scripts in any language to be invoked by the pgxn commands dispatcher. The first client extensions are already available: &lt;a href="https://github.com/guedes/pgxn-utils"&gt;PGXN Utils&lt;/a&gt; and &lt;a href="https://github.com/pgxn/pgxn-meta-validator/"&gt;PGXN:Meta:Validator&lt;/a&gt; are targeted for easier development of new extensions.&lt;/p&gt;

&lt;p&gt;The client is &lt;a href="http://pypi.python.org/pypi/pgxnclient"&gt;released on PyPI&lt;/a&gt;, so installing is just:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo easy_install pgxnclient
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Complete documentation and further links are available from the &lt;a href="http://pgxnclient.projects.postgresql.org/"&gt;project homepage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Any feedback is welcome; you can contact me and all the other people behind PGXN on the &lt;a href="https://groups.google.com/group/pgxn-users/"&gt;PGXN User Group&lt;/a&gt;. See you there!&lt;/p&gt;</description><link>http://blog.pgxn.org/post/13427961249</link><guid>http://blog.pgxn.org/post/13427961249</guid><pubDate>Sun, 27 Nov 2011 16:34:34 -0800</pubDate><category>pgxn client</category><category>release</category><dc:creator>d-piro</dc:creator></item><item><title>Postgres Open</title><description>&lt;p&gt;I&amp;#8217;m off to Chicago today for &lt;a href="http://www.postgresopen.org/"&gt;Postgres Open&lt;/a&gt;, a new PostgreSQL conference. I&amp;#8217;m pleased that I&amp;#8217;ll be presenting &amp;#8220;&lt;a href="http://postgresopen.org/2011/schedule/presentations/83/"&gt;Get Your Preferred Feature Developed!&lt;/a&gt;&amp;#8221;&lt;/p&gt;

&lt;p&gt;There are lots of developers out there who, like me, have ideas for projects they want to work on for PostgreSQL, but don&amp;#8217;t have the free time to make it happen. The idea for this talk is to pitch this fact to an audience of organizations with a major investment in PostgreSQL and an interest in seeing it improve. Perhaps one or more of them will look into sponsoring development of something that interests them, or that they need. This way, interested developers might get &lt;em&gt;paid&lt;/em&gt; to work on projects that interest them, to the benefit of the project, the community, and of course their sponsors. Naturally, I&amp;#8217;ll be drawing on PGXN as an example of how this sort of thing can work.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;e like to learn more, tune in! The whole conference will be live-streamed. Check &lt;a href="http://www.postgresopen.org/" title="Postgres Open"&gt;the site&lt;/a&gt; on Wednesday to get hooked up.&lt;/p&gt;</description><link>http://blog.pgxn.org/post/10166916693</link><guid>http://blog.pgxn.org/post/10166916693</guid><pubDate>Tue, 13 Sep 2011 09:40:24 -0700</pubDate><category>postgres open</category><category>pgtap</category><category>fundraising</category><dc:creator>justatheory</dc:creator></item><item><title>PGXN Utils 0.1.3 Released!</title><description>&lt;p&gt;by Dickson S. Guedes&lt;/p&gt;

&lt;p&gt;Hello everyone!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m proud to tell you that a new version of &lt;a href="https://github.com/guedes/pgxn-utils"&gt;pgxn_utils&lt;/a&gt; was released!&lt;/p&gt;

&lt;p&gt;In this version some errors with OpenSSL was fixed (thanks @theory to report then), and now you can release an extension to &lt;a href="http://pgxn.org"&gt;PGXN&lt;/a&gt; &lt;a href="http://blog.pgxn.org/post/6883009649/pgxn-utils-0-1-2-released"&gt;in &lt;strong&gt;five steps&lt;/strong&gt;&lt;/a&gt; even using Ruby 1.8!&lt;/p&gt;

&lt;p&gt;Another change was the executable&amp;#8217;s name that changed from &lt;code&gt;pgxn_utils&lt;/code&gt; to &lt;code&gt;pgxn-utils&lt;/code&gt; for a close integration with next version of &lt;a href="http://pgxnclient.projects.postgresql.org"&gt;PGXN Client&lt;/a&gt;, but some work need to be done, yet.&lt;/p&gt;

&lt;p&gt;I used &lt;code&gt;pgxn-utils&lt;/code&gt; to release itself to &lt;a href="http://pgxn.org/dist/pgxn_utils/"&gt;PGXN&lt;/a&gt;!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pgxn-utils release pgxn_utils-0.1.3.zip 
Enter your PGXN username: guedes
Enter your PGXN password: ***********************
Trying to release pgxn_utils-0.1.3.zip ... released successfully!
Visit: &lt;a href="http://pgxn.org/dist/pgxn_utils/0.1.3/"&gt;http://pgxn.org/dist/pgxn_utils/0.1.3/&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Cool, eh? So, since the PGXN&amp;#8217;s mirrors were synced and you have &lt;code&gt;pgxn&lt;/code&gt; client, you could install &lt;code&gt;pgxn_utils&lt;/code&gt; using:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pgxn install pgxn_utils
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you don&amp;#8217;t have &lt;code&gt;pgxn&lt;/code&gt; client you can install it using rubygems&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem install pgxn_utils
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.pgxn.org/post/9950473714</link><guid>http://blog.pgxn.org/post/9950473714</guid><pubDate>Wed, 07 Sep 2011 23:39:00 -0700</pubDate><category>pgxn utils</category><category>develoment</category><category>utils</category><category>build</category><category>bundle extension</category><category>meta</category><dc:creator>guediz</dc:creator></item><item><title>My presentation at the 2012 PDXPUG PGDay. It covers the basics...</title><description>&lt;iframe src="http://player.vimeo.com/video/27518246" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;My presentation at the 2012 PDXPUG PGDay. It covers the basics of how to create useful extensions to PostgreSQL and distribute them on PGXN—without needing to learn C.&lt;/p&gt;</description><link>http://blog.pgxn.org/post/8742312488</link><guid>http://blog.pgxn.org/post/8742312488</guid><pubDate>Wed, 10 Aug 2011 11:58:09 -0700</pubDate><category>pgxn</category><category>pgday</category><category>oscon</category><category>C</category><category>extensions</category><category>video</category><dc:creator>justatheory</dc:creator></item></channel></rss>
