mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-22 14:13:23 +02:00
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.
36 lines
1.0 KiB
SQL
36 lines
1.0 KiB
SQL
/* contrib/intagg/intagg--1.0.sql */
|
|
|
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
|
\echo Use "CREATE EXTENSION intagg" to load this file. \quit
|
|
|
|
-- Internal function for the aggregate
|
|
-- Is called for each item in an aggregation
|
|
CREATE FUNCTION int_agg_state (internal, int4)
|
|
RETURNS internal
|
|
AS 'array_agg_transfn'
|
|
LANGUAGE INTERNAL;
|
|
|
|
-- Internal function for the aggregate
|
|
-- Is called at the end of the aggregation, and returns an array.
|
|
CREATE FUNCTION int_agg_final_array (internal)
|
|
RETURNS int4[]
|
|
AS 'array_agg_finalfn'
|
|
LANGUAGE INTERNAL;
|
|
|
|
-- The aggregate function itself
|
|
-- uses the above functions to create an array of integers from an aggregation.
|
|
CREATE AGGREGATE int_array_aggregate (
|
|
BASETYPE = int4,
|
|
SFUNC = int_agg_state,
|
|
STYPE = internal,
|
|
FINALFUNC = int_agg_final_array
|
|
);
|
|
|
|
-- The enumeration function
|
|
-- returns each element in a one dimensional integer array
|
|
-- as a row.
|
|
CREATE FUNCTION int_array_enum(int4[])
|
|
RETURNS setof integer
|
|
AS 'array_unnest'
|
|
LANGUAGE INTERNAL IMMUTABLE STRICT;
|