]> granicus.if.org Git - postgresql/commitdiff
Use a new hstore extension version for added json functions.
authorAndrew Dunstan <andrew@dunslane.net>
Sun, 29 Sep 2013 21:41:56 +0000 (17:41 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Sun, 29 Sep 2013 21:41:56 +0000 (17:41 -0400)
This should have been done when the json functionality was added to
hstore in 9.3.0. To handle this correctly, the upgrade script therefore
uses conditional logic by using plpgsql in a DO statement to add the two
new functions and the new cast. If hstore_to_json_loose is detected as
already present and dependent on the hstore extension nothing is done.
This will require that the database be loaded with plpgsql.

People who have installed the earlier and spurious 1.1 version of hstore
will need to do:

ALTER EXTENSION hstore UPDATE;

to pick up the new functions properly.

contrib/hstore/hstore--1.1--1.2.sql [new file with mode: 0644]
contrib/hstore/hstore--1.2.sql [moved from contrib/hstore/hstore--1.1.sql with 100% similarity]
contrib/hstore/hstore.control

diff --git a/contrib/hstore/hstore--1.1--1.2.sql b/contrib/hstore/hstore--1.1--1.2.sql
new file mode 100644 (file)
index 0000000..99b8a16
--- /dev/null
@@ -0,0 +1,47 @@
+/* contrib/hstore/hstore--1.1--1.2.sql */
+
+-- complain if script is sourced in psql, rather than via ALTER EXTENSION
+\echo Use "ALTER EXTENSION hstore UPDATE TO '1.2'" to load this file. \quit
+
+
+-- A version of 1.1 was shipped with these objects mistakenly in 9.3.0.
+-- Therefore we only add them if we detect that they aren't already there and 
+-- dependent on the extension.
+
+DO LANGUAGE plpgsql
+
+$$
+
+BEGIN
+
+   PERFORM 1
+   FROM pg_proc p
+       JOIN  pg_depend d
+          ON p.proname = 'hstore_to_json_loose'
+            AND d.objid = p.oid
+            AND d.refclassid = 'pg_extension'::regclass
+       JOIN pg_extension x
+          ON d.refobjid = x.oid
+            AND  x.extname = 'hstore';
+
+   IF NOT FOUND
+   THEN 
+
+        CREATE FUNCTION hstore_to_json(hstore)
+        RETURNS json
+        AS 'MODULE_PATHNAME', 'hstore_to_json'
+        LANGUAGE C IMMUTABLE STRICT;
+
+        CREATE CAST (hstore AS json)
+          WITH FUNCTION hstore_to_json(hstore);
+
+        CREATE FUNCTION hstore_to_json_loose(hstore)
+        RETURNS json
+        AS 'MODULE_PATHNAME', 'hstore_to_json_loose'
+        LANGUAGE C IMMUTABLE STRICT;
+
+   END IF;
+
+END;
+
+$$;
index 4104e17e29cc4a47e439d876972932a5d1811aea..9daf5e2e00a38e3597660f4e04ad60d2f39a28b2 100644 (file)
@@ -1,5 +1,5 @@
 # hstore extension
 comment = 'data type for storing sets of (key, value) pairs'
-default_version = '1.1'
+default_version = '1.2'
 module_pathname = '$libdir/hstore'
 relocatable = true