hstore_plruby

Transform between hstore and Ruby Hashes for PL/Ruby

Overview

PackageVersionCategoryLicenseLanguage
plruby1.0LANGMITC
IDExtensionBinLibLoadCreateTrustRelocSchema
3160plrubyNoYesNoYesNoNopg_catalog
3161jsonb_plrubyNoYesNoYesNoYes-
3162hstore_plrubyNoYesNoYesNoYes-
3163ltree_plrubyNoYesNoYesNoYes-
Relatedhstore plruby hstore plruby jsonb_plruby ltree_plruby hstore_plperl hstore_plpython3u

Extension control default_version is 1.0; shipped in the PL/Ruby 2.5.0 package.

Version

TypeRepoVersionPG VerPackageDeps
EXTPIGSTY1.01817161514plrubyhstore, plruby
RPMPIGSTY2.5.01817161514plruby_$vruby-libs
DEBPIGSTY2.5.01817161514postgresql-$v-plruby-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
el8.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
el9.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
el9.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
el10.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
el10.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
d12.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
d12.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
d13.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
d13.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
u22.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
u22.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
u24.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
u24.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
u26.x86_64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0
u26.aarch64PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0PIGSTY 2.5.0

Build

You can build the RPM / DEB packages for plruby using pig build:

pig build pkg plruby         # build RPM / DEB packages

Install

You can install plruby directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:

pig repo add pgsql -u          # Add repo and update cache

Install the extension using pig or apt/yum/dnf:

pig install plruby;          # Install for current active PG version
pig ext install -y plruby -v 18  # PG 18
pig ext install -y plruby -v 17  # PG 17
pig ext install -y plruby -v 16  # PG 16
pig ext install -y plruby -v 15  # PG 15
pig ext install -y plruby -v 14  # PG 14
dnf install -y plruby_18       # PG 18
dnf install -y plruby_17       # PG 17
dnf install -y plruby_16       # PG 16
dnf install -y plruby_15       # PG 15
dnf install -y plruby_14       # PG 14
apt install -y postgresql-18-plruby   # PG 18
apt install -y postgresql-17-plruby   # PG 17
apt install -y postgresql-16-plruby   # PG 16
apt install -y postgresql-15-plruby   # PG 15
apt install -y postgresql-14-plruby   # PG 14

Create Extension:

CREATE EXTENSION hstore_plruby CASCADE;  -- requires: hstore, plruby

Usage

Sources:

hstore_plruby installs a PostgreSQL transform between hstore and Ruby Hash values for the plruby language. Keys become Ruby strings and values become strings or nil; a compatible Ruby hash can be returned directly as hstore.

Install and Use the Transform

CREATE EXTENSION hstore;
CREATE EXTENSION plruby;
CREATE EXTENSION hstore_plruby;

CREATE FUNCTION ruby_add_hstore_key(hstore)
RETURNS hstore
LANGUAGE plruby
TRANSFORM FOR TYPE hstore
AS $$
  value = args[0]
  value['processed'] = 'yes'
  value
$$;

SELECT ruby_add_hstore_key('id=>42'::hstore);

The transform is used only by functions that declare TRANSFORM FOR TYPE hstore.

Objects and Caveats

  • hstore_to_plruby(internal) implements SQL-to-Ruby conversion.
  • plruby_to_hstore(internal) implements Ruby-to-SQL conversion.
  • The extension version is 1.0, it requires both hstore and plruby, and it is relocatable.
  • hstore is a flat string-to-string-or-NULL map. It does not preserve nested Ruby hashes, arrays, or typed numeric values; use jsonb_plruby when those shapes matter.
  • PL/Ruby remains untrusted. Installing this transform does not sandbox Ruby code or reduce the privileges required to create PL/Ruby functions.

Last Modified: 2026-08-09: update extension count (24575456)