This post originated from an RSS feed registered with Ruby Buzz
by Robby Russell.
Original Post: Installing untrusted PL/Ruby for PostgreSQL
Feed Title: Robby on Rails
Feed URL: http://www.contegix.com/rss/feed.xml
Feed Description: My reflections on programming with Ruby, Rails, PostgreSQL... and learning how to run a business...
”PL/Ruby is a loadable procedural language for the Postgres database system that enable the Ruby language to create functions and trigger procedures”
Method 1. The standard, safe, PL/Ruby.
Before running this, you need to have all the PostgreSQL headers installed. (se INSTALL in the postgresql directory)
make install-all-headers
To install PL/Ruby, you need to download the tarball from here. As you can see, I download it with wget and then install like I would any ruby library. (maybe plruby could become a gem?)
cd /usr/local/src
wget ftp://moulon.inra.fr/pub/ruby/plruby.tar.gz
tar zxvf plruby.tar.gz
cd plruby
ruby extconf.rb
make
make install
Method 2: The untrusted, but super cool PL/Ruby.
Guy Decoux, author of PL/Ruby, was kind enough to share a secret about the PL/Ruby install. (from his email…)
Well plruby normally run with $SAFE = 12, this value if fixed at compile time.
Now it has an undocumented option, if you compile it with
ruby extconf.rb --with-safe-level=0 ...
it will run with $SAFE = 0 and you have the equivalent of an untrusted language.
Pretty simple solution, eh?
On my server I was able to run the following:
cd /usr/local/src
wget ftp://moulon.inra.fr/pub/ruby/plruby.tar.gz
tar zxvf plruby.tar.gz
cd plruby
sudo ruby extconf.rb \ --with-pgsql-dir=/usr/local/pgsql-8.0 \ --with-safe-level=0 \ --with-suffix=u
make
make install
Update: the --with-suffix=u was added after someone commented on this. This allows you to install plruby and plrubyu.
Installing PL/Ruby in PostgreSQL
Up until now, you haven’t actually installed the language into the database. We’re close though!
All that you need to do is run the following commands to install it to a specific database in your server.
$ psql template1
template1=# CREATE DATABASE plruby;
CREATE DATABASE
template1=# \c plruby
You are now connected to database "plruby".
plruby=# create function plruby_call_handler() returns language_handler
plruby-# as '/usr/lib/site_ruby/1.8/i386-linux/plruby.so'
plruby-# language 'C';
CREATE FUNCTION
plruby=# create language 'plruby'
plruby-# handler plruby_call_handler
plruby-# lancompiler 'PL/Ruby';
CREATE LANGUAGE
plruby=#