mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
458857cc9d
We have seen one too many reports of people trying to use 9.1 extension files in the old-fashioned way of sourcing them in psql. Not only does that usually not work (due to failure to substitute for MODULE_PATHNAME and/or @extschema@), but if it did work they'd get a collection of loose objects not an extension. To prevent this, insert an \echo ... \quit line that prints a suitable error message into each extension script file, and teach commands/extension.c to ignore lines starting with \echo. That should not only prevent any adverse consequences of loading a script file the wrong way, but make it crystal clear to users that they need to do it differently now. Tom Lane, following an idea of Andrew Dunstan's. Back-patch into 9.1 ... there is not going to be much value in this if we wait till 9.2.
99 lines
4.1 KiB
SQL
99 lines
4.1 KiB
SQL
/* contrib/pg_trgm/pg_trgm--unpackaged--1.0.sql */
|
|
|
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
|
\echo Use "CREATE EXTENSION pg_trgm" to load this file. \quit
|
|
|
|
ALTER EXTENSION pg_trgm ADD function set_limit(real);
|
|
ALTER EXTENSION pg_trgm ADD function show_limit();
|
|
ALTER EXTENSION pg_trgm ADD function show_trgm(text);
|
|
ALTER EXTENSION pg_trgm ADD function similarity(text,text);
|
|
ALTER EXTENSION pg_trgm ADD function similarity_op(text,text);
|
|
ALTER EXTENSION pg_trgm ADD operator %(text,text);
|
|
ALTER EXTENSION pg_trgm ADD type gtrgm;
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_in(cstring);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_out(gtrgm);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_consistent(internal,text,integer,oid,internal);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_compress(internal);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_decompress(internal);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_penalty(internal,internal,internal);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_picksplit(internal,internal);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_union(bytea,internal);
|
|
ALTER EXTENSION pg_trgm ADD function gtrgm_same(gtrgm,gtrgm,internal);
|
|
ALTER EXTENSION pg_trgm ADD operator family gist_trgm_ops using gist;
|
|
ALTER EXTENSION pg_trgm ADD operator class gist_trgm_ops using gist;
|
|
ALTER EXTENSION pg_trgm ADD operator family gin_trgm_ops using gin;
|
|
ALTER EXTENSION pg_trgm ADD operator class gin_trgm_ops using gin;
|
|
|
|
-- These functions had different names/signatures in 9.0. We can't just
|
|
-- drop and recreate them because they are linked into the GIN opclass,
|
|
-- so we need some ugly hacks.
|
|
|
|
-- First, absorb them into the extension under their old names.
|
|
|
|
ALTER EXTENSION pg_trgm ADD function gin_extract_trgm(text, internal);
|
|
ALTER EXTENSION pg_trgm ADD function gin_extract_trgm(text, internal, int2, internal, internal);
|
|
ALTER EXTENSION pg_trgm ADD function gin_trgm_consistent(internal,smallint,text,integer,internal,internal);
|
|
|
|
-- Fix the names, and then do CREATE OR REPLACE to adjust the function
|
|
-- bodies to be correct (ie, reference the correct C symbol).
|
|
|
|
ALTER FUNCTION gin_extract_trgm(text, internal)
|
|
RENAME TO gin_extract_value_trgm;
|
|
CREATE OR REPLACE FUNCTION gin_extract_value_trgm(text, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
ALTER FUNCTION gin_extract_trgm(text, internal, int2, internal, internal)
|
|
RENAME TO gin_extract_query_trgm;
|
|
CREATE OR REPLACE FUNCTION gin_extract_query_trgm(text, internal, int2, internal, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
-- gin_trgm_consistent didn't change name.
|
|
|
|
-- Last, fix the parameter lists by means of direct UPDATE on the pg_proc
|
|
-- entries. This is ugly as can be, but there's no other way to do it
|
|
-- while preserving the identities (OIDs) of the functions.
|
|
|
|
UPDATE pg_catalog.pg_proc
|
|
SET pronargs = 7, proargtypes = '25 2281 21 2281 2281 2281 2281'
|
|
WHERE oid = 'gin_extract_query_trgm(text,internal,int2,internal,internal)'::pg_catalog.regprocedure;
|
|
|
|
UPDATE pg_catalog.pg_proc
|
|
SET pronargs = 8, proargtypes = '2281 21 25 23 2281 2281 2281 2281'
|
|
WHERE oid = 'gin_trgm_consistent(internal,smallint,text,integer,internal,internal)'::pg_catalog.regprocedure;
|
|
|
|
|
|
-- These were not in 9.0:
|
|
|
|
CREATE FUNCTION similarity_dist(text,text)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C STRICT IMMUTABLE;
|
|
|
|
CREATE OPERATOR <-> (
|
|
LEFTARG = text,
|
|
RIGHTARG = text,
|
|
PROCEDURE = similarity_dist,
|
|
COMMUTATOR = '<->'
|
|
);
|
|
|
|
CREATE FUNCTION gtrgm_distance(internal,text,int,oid)
|
|
RETURNS float8
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
-- Add new stuff to the operator classes. See comment in pg_trgm--1.0.sql.
|
|
|
|
ALTER OPERATOR FAMILY gist_trgm_ops USING gist ADD
|
|
OPERATOR 2 <-> (text, text) FOR ORDER BY pg_catalog.float_ops,
|
|
OPERATOR 3 pg_catalog.~~ (text, text),
|
|
OPERATOR 4 pg_catalog.~~* (text, text),
|
|
FUNCTION 8 (text, text) gtrgm_distance (internal, text, int, oid);
|
|
|
|
ALTER OPERATOR FAMILY gin_trgm_ops USING gin ADD
|
|
OPERATOR 3 pg_catalog.~~ (text, text),
|
|
OPERATOR 4 pg_catalog.~~* (text, text);
|