Re: Extensions vs PGXS' MODULE_PATHNAME handling

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Extensions vs PGXS' MODULE_PATHNAME handling
Дата
Msg-id 25806.1297625657@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Extensions vs PGXS' MODULE_PATHNAME handling  (Dimitri Fontaine <dimitri@2ndQuadrant.fr>)
Ответы Re: Extensions vs PGXS' MODULE_PATHNAME handling  (Dimitri Fontaine <dimitri@2ndQuadrant.fr>)
Re: Extensions vs PGXS' MODULE_PATHNAME handling  ("David E. Wheeler" <david@kineticode.com>)
Список pgsql-hackers
Dimitri Fontaine <dimitri@2ndQuadrant.fr> writes:
> Tom Lane <tgl@sss.pgh.pa.us> writes:
>> I think it's better to keep it working as a textual substitution.
>> That poses the least risk of breaking scripts that work today ---
>> who's to say that somebody might not be relying on the substitution
>> happening someplace else than CREATE FUNCTION's shlib string?

> Fair enough, I suppose.  So +1 from me, FWIW.

OK, so with that, attached is an example of the complete conversion diff
for a contrib module (hstore in particular).  Although "git status"
reports hstore--1.0.sql as being a rename of hstore.sql.in, "git diff"
doesn't seem to be exceedingly bright about presenting it that way :-(.
But actually the change in that script other than renaming is just
removing the "set search_path" command and adjusting the header comment.

I've checked that regression tests pass and "create extension hstore
from unpackaged" successfully upgrades from a 9.0 dump.  I don't have
the ability to check that it works on Windows too, but since we're not
hacking pgxs.mk I doubt that there's anything to do to the Windows build
process.

Barring objections, I'll press on with fixing the rest of them.

            regards, tom lane

diff --git a/contrib/hstore/.gitignore b/contrib/hstore/.gitignore
index d7af95330c380d468c35f781f34de30ea05709a5..19b6c5ba425ca92d1bb371bf43d9cdae372f8c1a 100644
*** a/contrib/hstore/.gitignore
--- b/contrib/hstore/.gitignore
***************
*** 1,3 ****
- /hstore.sql
  # Generated subdirectories
  /results/
--- 1,2 ----
diff --git a/contrib/hstore/Makefile b/contrib/hstore/Makefile
index 1d533fdd60280b1e62610dd7b98cdfb4151de1b4..5badbdb714b60cd786cffa86526a405bccfd1ea0 100644
*** a/contrib/hstore/Makefile
--- b/contrib/hstore/Makefile
*************** MODULE_big = hstore
*** 4,11 ****
  OBJS = hstore_io.o hstore_op.o hstore_gist.o hstore_gin.o hstore_compat.o \
      crc32.o

! DATA_built = hstore.sql
! DATA = uninstall_hstore.sql
  REGRESS = hstore

  ifdef USE_PGXS
--- 4,11 ----
  OBJS = hstore_io.o hstore_op.o hstore_gist.o hstore_gin.o hstore_compat.o \
      crc32.o

! EXTENSION = hstore
! DATA = hstore--1.0.sql hstore--unpackaged--1.0.sql
  REGRESS = hstore

  ifdef USE_PGXS
diff --git a/contrib/hstore/expected/hstore.out b/contrib/hstore/expected/hstore.out
index 354fff20fe2b24127ac9ec1ae9a20f72d628e256..083faf8d9c433ba9f34a95f65fed64c0079a6561 100644
*** a/contrib/hstore/expected/hstore.out
--- b/contrib/hstore/expected/hstore.out
***************
*** 1,12 ****
! --
! -- first, define the datatype.  Turn off echoing so that expected file
! -- does not depend on contents of hstore.sql.
! --
! SET client_min_messages = warning;
! \set ECHO none
! psql:hstore.sql:228: WARNING:  => is deprecated as an operator name
  DETAIL:  This name may be disallowed altogether in future versions of PostgreSQL.
- RESET client_min_messages;
  set escape_string_warning=off;
  --hstore;
  select ''::hstore;
--- 1,6 ----
! CREATE EXTENSION hstore;
! WARNING:  => is deprecated as an operator name
  DETAIL:  This name may be disallowed altogether in future versions of PostgreSQL.
  set escape_string_warning=off;
  --hstore;
  select ''::hstore;
diff --git a/contrib/hstore/hstore--1.0.sql b/contrib/hstore/hstore--1.0.sql
index ...d77b14286bdce8af49bdad9620e00c5c4ce827fe .
*** a/contrib/hstore/hstore--1.0.sql
--- b/contrib/hstore/hstore--1.0.sql
***************
*** 0 ****
--- 1,527 ----
+ /* contrib/hstore/hstore--1.0.sql */
+
+ CREATE TYPE hstore;
+
+ CREATE OR REPLACE FUNCTION hstore_in(cstring)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_out(hstore)
+ RETURNS cstring
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_recv(internal)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_send(hstore)
+ RETURNS bytea
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE TYPE hstore (
+         INTERNALLENGTH = -1,
+         INPUT = hstore_in,
+         OUTPUT = hstore_out,
+         RECEIVE = hstore_recv,
+         SEND = hstore_send,
+         STORAGE = extended
+ );
+
+ CREATE OR REPLACE FUNCTION hstore_version_diag(hstore)
+ RETURNS integer
+ AS 'MODULE_PATHNAME','hstore_version_diag'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION fetchval(hstore,text)
+ RETURNS text
+ AS 'MODULE_PATHNAME','hstore_fetchval'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR -> (
+     LEFTARG = hstore,
+     RIGHTARG = text,
+     PROCEDURE = fetchval
+ );
+
+ CREATE OR REPLACE FUNCTION slice_array(hstore,text[])
+ RETURNS text[]
+ AS 'MODULE_PATHNAME','hstore_slice_to_array'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR -> (
+     LEFTARG = hstore,
+     RIGHTARG = text[],
+     PROCEDURE = slice_array
+ );
+
+ CREATE OR REPLACE FUNCTION slice(hstore,text[])
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_slice_to_hstore'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION isexists(hstore,text)
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_exists'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION exist(hstore,text)
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_exists'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR ? (
+     LEFTARG = hstore,
+     RIGHTARG = text,
+     PROCEDURE = exist,
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ CREATE OR REPLACE FUNCTION exists_any(hstore,text[])
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_exists_any'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR ?| (
+     LEFTARG = hstore,
+     RIGHTARG = text[],
+     PROCEDURE = exists_any,
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ CREATE OR REPLACE FUNCTION exists_all(hstore,text[])
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_exists_all'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR ?& (
+     LEFTARG = hstore,
+     RIGHTARG = text[],
+     PROCEDURE = exists_all,
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ CREATE OR REPLACE FUNCTION isdefined(hstore,text)
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_defined'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION defined(hstore,text)
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_defined'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION delete(hstore,text)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_delete'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION delete(hstore,text[])
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_delete_array'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION delete(hstore,hstore)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_delete_hstore'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR - (
+     LEFTARG = hstore,
+     RIGHTARG = text,
+     PROCEDURE = delete
+ );
+
+ CREATE OPERATOR - (
+     LEFTARG = hstore,
+     RIGHTARG = text[],
+     PROCEDURE = delete
+ );
+
+ CREATE OPERATOR - (
+     LEFTARG = hstore,
+     RIGHTARG = hstore,
+     PROCEDURE = delete
+ );
+
+ CREATE OR REPLACE FUNCTION hs_concat(hstore,hstore)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_concat'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR || (
+     LEFTARG = hstore,
+     RIGHTARG = hstore,
+     PROCEDURE = hs_concat
+ );
+
+ CREATE OR REPLACE FUNCTION hs_contains(hstore,hstore)
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_contains'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hs_contained(hstore,hstore)
+ RETURNS bool
+ AS 'MODULE_PATHNAME','hstore_contained'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR @> (
+     LEFTARG = hstore,
+     RIGHTARG = hstore,
+     PROCEDURE = hs_contains,
+     COMMUTATOR = '<@',
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ CREATE OPERATOR <@ (
+     LEFTARG = hstore,
+     RIGHTARG = hstore,
+     PROCEDURE = hs_contained,
+     COMMUTATOR = '@>',
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ -- obsolete:
+ CREATE OPERATOR @ (
+     LEFTARG = hstore,
+     RIGHTARG = hstore,
+     PROCEDURE = hs_contains,
+     COMMUTATOR = '~',
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ CREATE OPERATOR ~ (
+     LEFTARG = hstore,
+     RIGHTARG = hstore,
+     PROCEDURE = hs_contained,
+     COMMUTATOR = '@',
+     RESTRICT = contsel,
+     JOIN = contjoinsel
+ );
+
+ CREATE OR REPLACE FUNCTION tconvert(text,text)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_from_text'
+ LANGUAGE C IMMUTABLE; -- not STRICT; needs to allow (key,NULL)
+
+ CREATE OR REPLACE FUNCTION hstore(text,text)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME','hstore_from_text'
+ LANGUAGE C IMMUTABLE; -- not STRICT; needs to allow (key,NULL)
+
+ CREATE OPERATOR => (
+     LEFTARG = text,
+     RIGHTARG = text,
+     PROCEDURE = hstore
+ );
+
+ CREATE OR REPLACE FUNCTION hstore(text[],text[])
+ RETURNS hstore
+ AS 'MODULE_PATHNAME', 'hstore_from_arrays'
+ LANGUAGE C IMMUTABLE; -- not STRICT; allows (keys,null)
+
+ CREATE FUNCTION hstore(text[])
+ RETURNS hstore
+ AS 'MODULE_PATHNAME', 'hstore_from_array'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE CAST (text[] AS hstore)
+   WITH FUNCTION hstore(text[]);
+
+ CREATE OR REPLACE FUNCTION hstore(record)
+ RETURNS hstore
+ AS 'MODULE_PATHNAME', 'hstore_from_record'
+ LANGUAGE C IMMUTABLE; -- not STRICT; allows (null::recordtype)
+
+ CREATE OR REPLACE FUNCTION hstore_to_array(hstore)
+ RETURNS text[]
+ AS 'MODULE_PATHNAME','hstore_to_array'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR %% (
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_to_array
+ );
+
+ CREATE OR REPLACE FUNCTION hstore_to_matrix(hstore)
+ RETURNS text[]
+ AS 'MODULE_PATHNAME','hstore_to_matrix'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR %# (
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_to_matrix
+ );
+
+ CREATE OR REPLACE FUNCTION akeys(hstore)
+ RETURNS text[]
+ AS 'MODULE_PATHNAME','hstore_akeys'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION avals(hstore)
+ RETURNS text[]
+ AS 'MODULE_PATHNAME','hstore_avals'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION skeys(hstore)
+ RETURNS setof text
+ AS 'MODULE_PATHNAME','hstore_skeys'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION svals(hstore)
+ RETURNS setof text
+ AS 'MODULE_PATHNAME','hstore_svals'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION each(IN hs hstore,
+     OUT key text,
+     OUT value text)
+ RETURNS SETOF record
+ AS 'MODULE_PATHNAME','hstore_each'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION populate_record(anyelement,hstore)
+ RETURNS anyelement
+ AS 'MODULE_PATHNAME', 'hstore_populate_record'
+ LANGUAGE C IMMUTABLE; -- not STRICT; allows (null::rectype,hstore)
+
+ CREATE OPERATOR #= (
+     LEFTARG = anyelement,
+     RIGHTARG = hstore,
+     PROCEDURE = populate_record
+ );
+
+ -- btree support
+
+ CREATE OR REPLACE FUNCTION hstore_eq(hstore,hstore)
+ RETURNS boolean
+ AS 'MODULE_PATHNAME','hstore_eq'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_ne(hstore,hstore)
+ RETURNS boolean
+ AS 'MODULE_PATHNAME','hstore_ne'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_gt(hstore,hstore)
+ RETURNS boolean
+ AS 'MODULE_PATHNAME','hstore_gt'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_ge(hstore,hstore)
+ RETURNS boolean
+ AS 'MODULE_PATHNAME','hstore_ge'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_lt(hstore,hstore)
+ RETURNS boolean
+ AS 'MODULE_PATHNAME','hstore_lt'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_le(hstore,hstore)
+ RETURNS boolean
+ AS 'MODULE_PATHNAME','hstore_le'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION hstore_cmp(hstore,hstore)
+ RETURNS integer
+ AS 'MODULE_PATHNAME','hstore_cmp'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR = (
+        LEFTARG = hstore,
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_eq,
+        COMMUTATOR = =,
+        NEGATOR = <>,
+        RESTRICT = eqsel,
+        JOIN = eqjoinsel,
+        MERGES,
+        HASHES
+ );
+ CREATE OPERATOR <> (
+        LEFTARG = hstore,
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_ne,
+        COMMUTATOR = <>,
+        NEGATOR = =,
+        RESTRICT = neqsel,
+        JOIN = neqjoinsel
+ );
+
+ -- the comparison operators have funky names (and are undocumented)
+ -- in an attempt to discourage anyone from actually using them. they
+ -- only exist to support the btree opclass
+
+ CREATE OPERATOR #<# (
+        LEFTARG = hstore,
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_lt,
+        COMMUTATOR = #>#,
+        NEGATOR = #>=#,
+        RESTRICT = scalarltsel,
+        JOIN = scalarltjoinsel
+ );
+ CREATE OPERATOR #<=# (
+        LEFTARG = hstore,
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_le,
+        COMMUTATOR = #>=#,
+        NEGATOR = #>#,
+        RESTRICT = scalarltsel,
+        JOIN = scalarltjoinsel
+ );
+ CREATE OPERATOR #># (
+        LEFTARG = hstore,
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_gt,
+        COMMUTATOR = #<#,
+        NEGATOR = #<=#,
+        RESTRICT = scalargtsel,
+        JOIN = scalargtjoinsel
+ );
+ CREATE OPERATOR #>=# (
+        LEFTARG = hstore,
+        RIGHTARG = hstore,
+        PROCEDURE = hstore_ge,
+        COMMUTATOR = #<=#,
+        NEGATOR = #<#,
+        RESTRICT = scalargtsel,
+        JOIN = scalargtjoinsel
+ );
+
+ CREATE OPERATOR CLASS btree_hstore_ops
+ DEFAULT FOR TYPE hstore USING btree
+ AS
+     OPERATOR    1    #<# ,
+     OPERATOR    2    #<=# ,
+     OPERATOR    3    = ,
+     OPERATOR    4    #>=# ,
+     OPERATOR    5    #># ,
+     FUNCTION    1    hstore_cmp(hstore,hstore);
+
+ -- hash support
+
+ CREATE OR REPLACE FUNCTION hstore_hash(hstore)
+ RETURNS integer
+ AS 'MODULE_PATHNAME','hstore_hash'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OPERATOR CLASS hash_hstore_ops
+ DEFAULT FOR TYPE hstore USING hash
+ AS
+     OPERATOR    1    = ,
+     FUNCTION    1    hstore_hash(hstore);
+
+ -- GiST support
+
+ CREATE TYPE ghstore;
+
+ CREATE OR REPLACE FUNCTION ghstore_in(cstring)
+ RETURNS ghstore
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE OR REPLACE FUNCTION ghstore_out(ghstore)
+ RETURNS cstring
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C STRICT IMMUTABLE;
+
+ CREATE TYPE ghstore (
+         INTERNALLENGTH = -1,
+         INPUT = ghstore_in,
+         OUTPUT = ghstore_out
+ );
+
+ CREATE OR REPLACE FUNCTION ghstore_compress(internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION ghstore_decompress(internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION ghstore_penalty(internal,internal,internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION ghstore_picksplit(internal, internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION ghstore_union(internal, internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION ghstore_same(internal, internal, internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION ghstore_consistent(internal,internal,int,oid,internal)
+ RETURNS bool
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OPERATOR CLASS gist_hstore_ops
+ DEFAULT FOR TYPE hstore USING gist
+ AS
+     OPERATOR        7       @> ,
+     OPERATOR        9       ?(hstore,text) ,
+     OPERATOR        10      ?|(hstore,text[]) ,
+     OPERATOR        11      ?&(hstore,text[]) ,
+         --OPERATOR        8       <@ ,
+         OPERATOR        13      @ ,
+         --OPERATOR        14      ~ ,
+         FUNCTION        1       ghstore_consistent (internal, internal, int, oid, internal),
+         FUNCTION        2       ghstore_union (internal, internal),
+         FUNCTION        3       ghstore_compress (internal),
+         FUNCTION        4       ghstore_decompress (internal),
+         FUNCTION        5       ghstore_penalty (internal, internal, internal),
+         FUNCTION        6       ghstore_picksplit (internal, internal),
+         FUNCTION        7       ghstore_same (internal, internal, internal),
+         STORAGE         ghstore;
+
+ -- GIN support
+
+ CREATE OR REPLACE FUNCTION gin_extract_hstore(internal, internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION gin_extract_hstore_query(internal, internal, int2, internal, internal)
+ RETURNS internal
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OR REPLACE FUNCTION gin_consistent_hstore(internal, int2, internal, int4, internal, internal)
+ RETURNS bool
+ AS 'MODULE_PATHNAME'
+ LANGUAGE C IMMUTABLE STRICT;
+
+ CREATE OPERATOR CLASS gin_hstore_ops
+ DEFAULT FOR TYPE hstore USING gin
+ AS
+     OPERATOR        7       @>,
+     OPERATOR        9       ?(hstore,text),
+     OPERATOR        10      ?|(hstore,text[]),
+     OPERATOR        11      ?&(hstore,text[]),
+     FUNCTION        1       bttextcmp(text,text),
+     FUNCTION        2       gin_extract_hstore(internal, internal),
+     FUNCTION        3       gin_extract_hstore_query(internal, internal, int2, internal, internal),
+     FUNCTION        4       gin_consistent_hstore(internal, int2, internal, int4, internal, internal),
+     STORAGE         text;
diff --git a/contrib/hstore/hstore--unpackaged--1.0.sql b/contrib/hstore/hstore--unpackaged--1.0.sql
index ...3236543fe463af1ec2caf3d67bb8ed03e7802cf4 .
*** a/contrib/hstore/hstore--unpackaged--1.0.sql
--- b/contrib/hstore/hstore--unpackaged--1.0.sql
***************
*** 0 ****
--- 1,89 ----
+ /* contrib/hstore/hstore--unpackaged--1.0.sql */
+
+ ALTER EXTENSION hstore ADD cast (text[] as hstore);
+ ALTER EXTENSION hstore ADD function akeys(hstore);
+ ALTER EXTENSION hstore ADD function avals(hstore);
+ ALTER EXTENSION hstore ADD function defined(hstore,text);
+ ALTER EXTENSION hstore ADD function delete(hstore,hstore);
+ ALTER EXTENSION hstore ADD function delete(hstore,text);
+ ALTER EXTENSION hstore ADD function delete(hstore,text[]);
+ ALTER EXTENSION hstore ADD function each(hstore);
+ ALTER EXTENSION hstore ADD function exist(hstore,text);
+ ALTER EXTENSION hstore ADD function exists_all(hstore,text[]);
+ ALTER EXTENSION hstore ADD function exists_any(hstore,text[]);
+ ALTER EXTENSION hstore ADD function fetchval(hstore,text);
+ ALTER EXTENSION hstore ADD function ghstore_compress(internal);
+ ALTER EXTENSION hstore ADD function ghstore_consistent(internal,internal,integer,oid,internal);
+ ALTER EXTENSION hstore ADD function ghstore_decompress(internal);
+ ALTER EXTENSION hstore ADD function ghstore_in(cstring);
+ ALTER EXTENSION hstore ADD function ghstore_out(ghstore);
+ ALTER EXTENSION hstore ADD function ghstore_penalty(internal,internal,internal);
+ ALTER EXTENSION hstore ADD function ghstore_picksplit(internal,internal);
+ ALTER EXTENSION hstore ADD function ghstore_same(internal,internal,internal);
+ ALTER EXTENSION hstore ADD function ghstore_union(internal,internal);
+ ALTER EXTENSION hstore ADD function gin_consistent_hstore(internal,smallint,internal,integer,internal,internal);
+ ALTER EXTENSION hstore ADD function gin_extract_hstore(internal,internal);
+ ALTER EXTENSION hstore ADD function gin_extract_hstore_query(internal,internal,smallint,internal,internal);
+ ALTER EXTENSION hstore ADD function hs_concat(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hs_contained(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hs_contains(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore(record);
+ ALTER EXTENSION hstore ADD function hstore(text,text);
+ ALTER EXTENSION hstore ADD function hstore(text[]);
+ ALTER EXTENSION hstore ADD function hstore(text[],text[]);
+ ALTER EXTENSION hstore ADD function hstore_cmp(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_eq(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_ge(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_gt(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_hash(hstore);
+ ALTER EXTENSION hstore ADD function hstore_in(cstring);
+ ALTER EXTENSION hstore ADD function hstore_le(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_lt(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_ne(hstore,hstore);
+ ALTER EXTENSION hstore ADD function hstore_out(hstore);
+ ALTER EXTENSION hstore ADD function hstore_recv(internal);
+ ALTER EXTENSION hstore ADD function hstore_send(hstore);
+ ALTER EXTENSION hstore ADD function hstore_to_array(hstore);
+ ALTER EXTENSION hstore ADD function hstore_to_matrix(hstore);
+ ALTER EXTENSION hstore ADD function hstore_version_diag(hstore);
+ ALTER EXTENSION hstore ADD function isdefined(hstore,text);
+ ALTER EXTENSION hstore ADD function isexists(hstore,text);
+ ALTER EXTENSION hstore ADD function populate_record(anyelement,hstore);
+ ALTER EXTENSION hstore ADD function skeys(hstore);
+ ALTER EXTENSION hstore ADD function slice(hstore,text[]);
+ ALTER EXTENSION hstore ADD function slice_array(hstore,text[]);
+ ALTER EXTENSION hstore ADD function svals(hstore);
+ ALTER EXTENSION hstore ADD function tconvert(text,text);
+ ALTER EXTENSION hstore ADD operator #<#(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator #<=#(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator #=(anyelement,hstore);
+ ALTER EXTENSION hstore ADD operator #>#(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator #>=#(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator %#(NONE,hstore);
+ ALTER EXTENSION hstore ADD operator %%(NONE,hstore);
+ ALTER EXTENSION hstore ADD operator -(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator -(hstore,text);
+ ALTER EXTENSION hstore ADD operator -(hstore,text[]);
+ ALTER EXTENSION hstore ADD operator ->(hstore,text);
+ ALTER EXTENSION hstore ADD operator ->(hstore,text[]);
+ ALTER EXTENSION hstore ADD operator <>(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator <@(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator =(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator =>(text,text);
+ ALTER EXTENSION hstore ADD operator ?&(hstore,text[]);
+ ALTER EXTENSION hstore ADD operator ?(hstore,text);
+ ALTER EXTENSION hstore ADD operator ?|(hstore,text[]);
+ ALTER EXTENSION hstore ADD operator @(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator @>(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator class btree_hstore_ops using btree;
+ ALTER EXTENSION hstore ADD operator class gin_hstore_ops using gin;
+ ALTER EXTENSION hstore ADD operator class gist_hstore_ops using gist;
+ ALTER EXTENSION hstore ADD operator class hash_hstore_ops using hash;
+ ALTER EXTENSION hstore ADD operator family btree_hstore_ops using btree;
+ ALTER EXTENSION hstore ADD operator family gin_hstore_ops using gin;
+ ALTER EXTENSION hstore ADD operator family gist_hstore_ops using gist;
+ ALTER EXTENSION hstore ADD operator family hash_hstore_ops using hash;
+ ALTER EXTENSION hstore ADD operator ||(hstore,hstore);
+ ALTER EXTENSION hstore ADD operator ~(hstore,hstore);
+ ALTER EXTENSION hstore ADD type ghstore;
+ ALTER EXTENSION hstore ADD type hstore;
diff --git a/contrib/hstore/hstore.control b/contrib/hstore/hstore.control
index ...0a57b3487b4392ba73884979d665a6a892b38ebf .
*** a/contrib/hstore/hstore.control
--- b/contrib/hstore/hstore.control
***************
*** 0 ****
--- 1,5 ----
+ # hstore extension
+ comment = 'store sets of (key, value) pairs'
+ default_version = '1.0'
+ module_pathname = '$libdir/hstore'
+ relocatable = true
diff --git a/contrib/hstore/hstore.sql.in b/contrib/hstore/hstore.sql.in
index 5b39c189e112e57b245b878f64567af6fbd7347c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
*** a/contrib/hstore/hstore.sql.in
--- b/contrib/hstore/hstore.sql.in
***************
*** 1,530 ****
- /* contrib/hstore/hstore.sql.in */
-
- -- Adjust this setting to control where the objects get created.
- SET search_path = public;
-
- CREATE TYPE hstore;
-
- CREATE OR REPLACE FUNCTION hstore_in(cstring)
- RETURNS hstore
- AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_out(hstore)
- RETURNS cstring
- AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_recv(internal)
- RETURNS hstore
- AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_send(hstore)
- RETURNS bytea
- AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE TYPE hstore (
-         INTERNALLENGTH = -1,
-         INPUT = hstore_in,
-         OUTPUT = hstore_out,
-         RECEIVE = hstore_recv,
-         SEND = hstore_send,
-         STORAGE = extended
- );
-
- CREATE OR REPLACE FUNCTION hstore_version_diag(hstore)
- RETURNS integer
- AS 'MODULE_PATHNAME','hstore_version_diag'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION fetchval(hstore,text)
- RETURNS text
- AS 'MODULE_PATHNAME','hstore_fetchval'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR -> (
-     LEFTARG = hstore,
-     RIGHTARG = text,
-     PROCEDURE = fetchval
- );
-
- CREATE OR REPLACE FUNCTION slice_array(hstore,text[])
- RETURNS text[]
- AS 'MODULE_PATHNAME','hstore_slice_to_array'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR -> (
-     LEFTARG = hstore,
-     RIGHTARG = text[],
-     PROCEDURE = slice_array
- );
-
- CREATE OR REPLACE FUNCTION slice(hstore,text[])
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_slice_to_hstore'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION isexists(hstore,text)
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_exists'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION exist(hstore,text)
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_exists'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR ? (
-     LEFTARG = hstore,
-     RIGHTARG = text,
-     PROCEDURE = exist,
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- CREATE OR REPLACE FUNCTION exists_any(hstore,text[])
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_exists_any'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR ?| (
-     LEFTARG = hstore,
-     RIGHTARG = text[],
-     PROCEDURE = exists_any,
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- CREATE OR REPLACE FUNCTION exists_all(hstore,text[])
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_exists_all'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR ?& (
-     LEFTARG = hstore,
-     RIGHTARG = text[],
-     PROCEDURE = exists_all,
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- CREATE OR REPLACE FUNCTION isdefined(hstore,text)
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_defined'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION defined(hstore,text)
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_defined'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION delete(hstore,text)
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_delete'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION delete(hstore,text[])
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_delete_array'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION delete(hstore,hstore)
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_delete_hstore'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR - (
-     LEFTARG = hstore,
-     RIGHTARG = text,
-     PROCEDURE = delete
- );
-
- CREATE OPERATOR - (
-     LEFTARG = hstore,
-     RIGHTARG = text[],
-     PROCEDURE = delete
- );
-
- CREATE OPERATOR - (
-     LEFTARG = hstore,
-     RIGHTARG = hstore,
-     PROCEDURE = delete
- );
-
- CREATE OR REPLACE FUNCTION hs_concat(hstore,hstore)
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_concat'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR || (
-     LEFTARG = hstore,
-     RIGHTARG = hstore,
-     PROCEDURE = hs_concat
- );
-
- CREATE OR REPLACE FUNCTION hs_contains(hstore,hstore)
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_contains'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hs_contained(hstore,hstore)
- RETURNS bool
- AS 'MODULE_PATHNAME','hstore_contained'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR @> (
-     LEFTARG = hstore,
-     RIGHTARG = hstore,
-     PROCEDURE = hs_contains,
-     COMMUTATOR = '<@',
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- CREATE OPERATOR <@ (
-     LEFTARG = hstore,
-     RIGHTARG = hstore,
-     PROCEDURE = hs_contained,
-     COMMUTATOR = '@>',
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- -- obsolete:
- CREATE OPERATOR @ (
-     LEFTARG = hstore,
-     RIGHTARG = hstore,
-     PROCEDURE = hs_contains,
-     COMMUTATOR = '~',
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- CREATE OPERATOR ~ (
-     LEFTARG = hstore,
-     RIGHTARG = hstore,
-     PROCEDURE = hs_contained,
-     COMMUTATOR = '@',
-     RESTRICT = contsel,
-     JOIN = contjoinsel
- );
-
- CREATE OR REPLACE FUNCTION tconvert(text,text)
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_from_text'
- LANGUAGE C IMMUTABLE; -- not STRICT; needs to allow (key,NULL)
-
- CREATE OR REPLACE FUNCTION hstore(text,text)
- RETURNS hstore
- AS 'MODULE_PATHNAME','hstore_from_text'
- LANGUAGE C IMMUTABLE; -- not STRICT; needs to allow (key,NULL)
-
- CREATE OPERATOR => (
-     LEFTARG = text,
-     RIGHTARG = text,
-     PROCEDURE = hstore
- );
-
- CREATE OR REPLACE FUNCTION hstore(text[],text[])
- RETURNS hstore
- AS 'MODULE_PATHNAME', 'hstore_from_arrays'
- LANGUAGE C IMMUTABLE; -- not STRICT; allows (keys,null)
-
- CREATE FUNCTION hstore(text[])
- RETURNS hstore
- AS 'MODULE_PATHNAME', 'hstore_from_array'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE CAST (text[] AS hstore)
-   WITH FUNCTION hstore(text[]);
-
- CREATE OR REPLACE FUNCTION hstore(record)
- RETURNS hstore
- AS 'MODULE_PATHNAME', 'hstore_from_record'
- LANGUAGE C IMMUTABLE; -- not STRICT; allows (null::recordtype)
-
- CREATE OR REPLACE FUNCTION hstore_to_array(hstore)
- RETURNS text[]
- AS 'MODULE_PATHNAME','hstore_to_array'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR %% (
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_to_array
- );
-
- CREATE OR REPLACE FUNCTION hstore_to_matrix(hstore)
- RETURNS text[]
- AS 'MODULE_PATHNAME','hstore_to_matrix'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR %# (
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_to_matrix
- );
-
- CREATE OR REPLACE FUNCTION akeys(hstore)
- RETURNS text[]
- AS 'MODULE_PATHNAME','hstore_akeys'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION avals(hstore)
- RETURNS text[]
- AS 'MODULE_PATHNAME','hstore_avals'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION skeys(hstore)
- RETURNS setof text
- AS 'MODULE_PATHNAME','hstore_skeys'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION svals(hstore)
- RETURNS setof text
- AS 'MODULE_PATHNAME','hstore_svals'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION each(IN hs hstore,
-     OUT key text,
-     OUT value text)
- RETURNS SETOF record
- AS 'MODULE_PATHNAME','hstore_each'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION populate_record(anyelement,hstore)
- RETURNS anyelement
- AS 'MODULE_PATHNAME', 'hstore_populate_record'
- LANGUAGE C IMMUTABLE; -- not STRICT; allows (null::rectype,hstore)
-
- CREATE OPERATOR #= (
-     LEFTARG = anyelement,
-     RIGHTARG = hstore,
-     PROCEDURE = populate_record
- );
-
- -- btree support
-
- CREATE OR REPLACE FUNCTION hstore_eq(hstore,hstore)
- RETURNS boolean
- AS 'MODULE_PATHNAME','hstore_eq'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_ne(hstore,hstore)
- RETURNS boolean
- AS 'MODULE_PATHNAME','hstore_ne'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_gt(hstore,hstore)
- RETURNS boolean
- AS 'MODULE_PATHNAME','hstore_gt'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_ge(hstore,hstore)
- RETURNS boolean
- AS 'MODULE_PATHNAME','hstore_ge'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_lt(hstore,hstore)
- RETURNS boolean
- AS 'MODULE_PATHNAME','hstore_lt'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_le(hstore,hstore)
- RETURNS boolean
- AS 'MODULE_PATHNAME','hstore_le'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION hstore_cmp(hstore,hstore)
- RETURNS integer
- AS 'MODULE_PATHNAME','hstore_cmp'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR = (
-        LEFTARG = hstore,
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_eq,
-        COMMUTATOR = =,
-        NEGATOR = <>,
-        RESTRICT = eqsel,
-        JOIN = eqjoinsel,
-        MERGES,
-        HASHES
- );
- CREATE OPERATOR <> (
-        LEFTARG = hstore,
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_ne,
-        COMMUTATOR = <>,
-        NEGATOR = =,
-        RESTRICT = neqsel,
-        JOIN = neqjoinsel
- );
-
- -- the comparison operators have funky names (and are undocumented)
- -- in an attempt to discourage anyone from actually using them. they
- -- only exist to support the btree opclass
-
- CREATE OPERATOR #<# (
-        LEFTARG = hstore,
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_lt,
-        COMMUTATOR = #>#,
-        NEGATOR = #>=#,
-        RESTRICT = scalarltsel,
-        JOIN = scalarltjoinsel
- );
- CREATE OPERATOR #<=# (
-        LEFTARG = hstore,
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_le,
-        COMMUTATOR = #>=#,
-        NEGATOR = #>#,
-        RESTRICT = scalarltsel,
-        JOIN = scalarltjoinsel
- );
- CREATE OPERATOR #># (
-        LEFTARG = hstore,
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_gt,
-        COMMUTATOR = #<#,
-        NEGATOR = #<=#,
-        RESTRICT = scalargtsel,
-        JOIN = scalargtjoinsel
- );
- CREATE OPERATOR #>=# (
-        LEFTARG = hstore,
-        RIGHTARG = hstore,
-        PROCEDURE = hstore_ge,
-        COMMUTATOR = #<=#,
-        NEGATOR = #<#,
-        RESTRICT = scalargtsel,
-        JOIN = scalargtjoinsel
- );
-
- CREATE OPERATOR CLASS btree_hstore_ops
- DEFAULT FOR TYPE hstore USING btree
- AS
-     OPERATOR    1    #<# ,
-     OPERATOR    2    #<=# ,
-     OPERATOR    3    = ,
-     OPERATOR    4    #>=# ,
-     OPERATOR    5    #># ,
-     FUNCTION    1    hstore_cmp(hstore,hstore);
-
- -- hash support
-
- CREATE OR REPLACE FUNCTION hstore_hash(hstore)
- RETURNS integer
- AS 'MODULE_PATHNAME','hstore_hash'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OPERATOR CLASS hash_hstore_ops
- DEFAULT FOR TYPE hstore USING hash
- AS
-     OPERATOR    1    = ,
-     FUNCTION    1    hstore_hash(hstore);
-
- -- GiST support
-
- CREATE TYPE ghstore;
-
- CREATE OR REPLACE FUNCTION ghstore_in(cstring)
- RETURNS ghstore
- AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE OR REPLACE FUNCTION ghstore_out(ghstore)
- RETURNS cstring
- AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT IMMUTABLE;
-
- CREATE TYPE ghstore (
-         INTERNALLENGTH = -1,
-         INPUT = ghstore_in,
-         OUTPUT = ghstore_out
- );
-
- CREATE OR REPLACE FUNCTION ghstore_compress(internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION ghstore_decompress(internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION ghstore_penalty(internal,internal,internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION ghstore_picksplit(internal, internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION ghstore_union(internal, internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION ghstore_same(internal, internal, internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION ghstore_consistent(internal,internal,int,oid,internal)
- RETURNS bool
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OPERATOR CLASS gist_hstore_ops
- DEFAULT FOR TYPE hstore USING gist
- AS
-     OPERATOR        7       @> ,
-     OPERATOR        9       ?(hstore,text) ,
-     OPERATOR        10      ?|(hstore,text[]) ,
-     OPERATOR        11      ?&(hstore,text[]) ,
-         --OPERATOR        8       <@ ,
-         OPERATOR        13      @ ,
-         --OPERATOR        14      ~ ,
-         FUNCTION        1       ghstore_consistent (internal, internal, int, oid, internal),
-         FUNCTION        2       ghstore_union (internal, internal),
-         FUNCTION        3       ghstore_compress (internal),
-         FUNCTION        4       ghstore_decompress (internal),
-         FUNCTION        5       ghstore_penalty (internal, internal, internal),
-         FUNCTION        6       ghstore_picksplit (internal, internal),
-         FUNCTION        7       ghstore_same (internal, internal, internal),
-         STORAGE         ghstore;
-
- -- GIN support
-
- CREATE OR REPLACE FUNCTION gin_extract_hstore(internal, internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION gin_extract_hstore_query(internal, internal, int2, internal, internal)
- RETURNS internal
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OR REPLACE FUNCTION gin_consistent_hstore(internal, int2, internal, int4, internal, internal)
- RETURNS bool
- AS 'MODULE_PATHNAME'
- LANGUAGE C IMMUTABLE STRICT;
-
- CREATE OPERATOR CLASS gin_hstore_ops
- DEFAULT FOR TYPE hstore USING gin
- AS
-     OPERATOR        7       @>,
-     OPERATOR        9       ?(hstore,text),
-     OPERATOR        10      ?|(hstore,text[]),
-     OPERATOR        11      ?&(hstore,text[]),
-     FUNCTION        1       bttextcmp(text,text),
-     FUNCTION        2       gin_extract_hstore(internal, internal),
-     FUNCTION        3       gin_extract_hstore_query(internal, internal, int2, internal, internal),
-     FUNCTION        4       gin_consistent_hstore(internal, int2, internal, int4, internal, internal),
-     STORAGE         text;
--- 0 ----
diff --git a/contrib/hstore/sql/hstore.sql b/contrib/hstore/sql/hstore.sql
index 58a79675267aecc63ff8f50fe8bdd33ec44c567b..fb6bb59f8a0045b778d6a9bf2e72f7a036752383 100644
*** a/contrib/hstore/sql/hstore.sql
--- b/contrib/hstore/sql/hstore.sql
***************
*** 1,12 ****
! --
! -- first, define the datatype.  Turn off echoing so that expected file
! -- does not depend on contents of hstore.sql.
! --
! SET client_min_messages = warning;
! \set ECHO none
! \i hstore.sql
! \set ECHO all
! RESET client_min_messages;

  set escape_string_warning=off;

--- 1,4 ----
! CREATE EXTENSION hstore;

  set escape_string_warning=off;

diff --git a/contrib/hstore/uninstall_hstore.sql b/contrib/hstore/uninstall_hstore.sql
index a03e43164f8b315b2fccb533adc3034c0124bb07..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
*** a/contrib/hstore/uninstall_hstore.sql
--- b/contrib/hstore/uninstall_hstore.sql
***************
*** 1,86 ****
- /* contrib/hstore/uninstall_hstore.sql */
-
- -- Adjust this setting to control where the objects get dropped.
- SET search_path = public;
-
- DROP OPERATOR CLASS gist_hstore_ops USING gist CASCADE;
- DROP OPERATOR CLASS gin_hstore_ops USING gin CASCADE;
- DROP OPERATOR CLASS hash_hstore_ops USING hash CASCADE;
- DROP OPERATOR CLASS btree_hstore_ops USING btree CASCADE;
-
- DROP OPERATOR -  ( hstore, text );
- DROP OPERATOR -  ( hstore, text[] );
- DROP OPERATOR -  ( hstore, hstore );
- DROP OPERATOR ?  ( hstore, text );
- DROP OPERATOR ?& ( hstore, text[] );
- DROP OPERATOR ?| ( hstore, text[] );
- DROP OPERATOR -> ( hstore, text );
- DROP OPERATOR -> ( hstore, text[] );
- DROP OPERATOR || ( hstore, hstore );
- DROP OPERATOR @> ( hstore, hstore );
- DROP OPERATOR <@ ( hstore, hstore );
- DROP OPERATOR @  ( hstore, hstore );
- DROP OPERATOR ~  ( hstore, hstore );
- DROP OPERATOR => ( text, text );
- DROP OPERATOR #= ( anyelement, hstore );
- DROP OPERATOR %% ( NONE, hstore );
- DROP OPERATOR %# ( NONE, hstore );
- DROP OPERATOR =  ( hstore, hstore );
- DROP OPERATOR <> ( hstore, hstore );
- DROP OPERATOR #<#  ( hstore, hstore );
- DROP OPERATOR #<=# ( hstore, hstore );
- DROP OPERATOR #>#  ( hstore, hstore );
- DROP OPERATOR #>=# ( hstore, hstore );
-
- DROP CAST (text[] AS hstore);
-
- DROP FUNCTION hstore_eq(hstore,hstore);
- DROP FUNCTION hstore_ne(hstore,hstore);
- DROP FUNCTION hstore_gt(hstore,hstore);
- DROP FUNCTION hstore_ge(hstore,hstore);
- DROP FUNCTION hstore_lt(hstore,hstore);
- DROP FUNCTION hstore_le(hstore,hstore);
- DROP FUNCTION hstore_cmp(hstore,hstore);
- DROP FUNCTION hstore_hash(hstore);
- DROP FUNCTION slice_array(hstore,text[]);
- DROP FUNCTION slice(hstore,text[]);
- DROP FUNCTION fetchval(hstore,text);
- DROP FUNCTION isexists(hstore,text);
- DROP FUNCTION exist(hstore,text);
- DROP FUNCTION exists_any(hstore,text[]);
- DROP FUNCTION exists_all(hstore,text[]);
- DROP FUNCTION isdefined(hstore,text);
- DROP FUNCTION defined(hstore,text);
- DROP FUNCTION delete(hstore,text);
- DROP FUNCTION delete(hstore,text[]);
- DROP FUNCTION delete(hstore,hstore);
- DROP FUNCTION hs_concat(hstore,hstore);
- DROP FUNCTION hs_contains(hstore,hstore);
- DROP FUNCTION hs_contained(hstore,hstore);
- DROP FUNCTION tconvert(text,text);
- DROP FUNCTION hstore(text,text);
- DROP FUNCTION hstore(text[],text[]);
- DROP FUNCTION hstore_to_array(hstore);
- DROP FUNCTION hstore_to_matrix(hstore);
- DROP FUNCTION hstore(record);
- DROP FUNCTION hstore(text[]);
- DROP FUNCTION akeys(hstore);
- DROP FUNCTION avals(hstore);
- DROP FUNCTION skeys(hstore);
- DROP FUNCTION svals(hstore);
- DROP FUNCTION each(hstore);
- DROP FUNCTION populate_record(anyelement,hstore);
- DROP FUNCTION ghstore_compress(internal);
- DROP FUNCTION ghstore_decompress(internal);
- DROP FUNCTION ghstore_penalty(internal,internal,internal);
- DROP FUNCTION ghstore_picksplit(internal, internal);
- DROP FUNCTION ghstore_union(internal, internal);
- DROP FUNCTION ghstore_same(internal, internal, internal);
- DROP FUNCTION ghstore_consistent(internal,internal,int,oid,internal);
- DROP FUNCTION gin_consistent_hstore(internal, int2, internal, int4, internal, internal);
- DROP FUNCTION gin_extract_hstore(internal, internal);
- DROP FUNCTION gin_extract_hstore_query(internal, internal, smallint, internal, internal);
- DROP FUNCTION hstore_version_diag(hstore);
-
- DROP TYPE hstore CASCADE;
- DROP TYPE ghstore CASCADE;
--- 0 ----

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Dimitri Fontaine
Дата:
Сообщение: Re: Extensions vs PGXS' MODULE_PATHNAME handling
Следующее
От: Robert Haas
Дата:
Сообщение: Re: ALTER TYPE 2: skip already-provable no-work rewrites