mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
de1d042f59
To do this, we only have to remove the compress and decompress support
functions, which have never done anything more than detoasting.
In the wake of commit d3a4f89d8
, this results in automatically enabling
index-only scans, since the core code will now know that the stored
representation is the same as the original data (up to detoasting).
The only exciting part of this is that ALTER OPERATOR FAMILY lacks
a way to drop a support function that was declared as being part of
an opclass rather than being loose in the family. For the moment,
we'll hack our way to a solution with a manual update of the pg_depend
entry type, which is what distinguishes the two cases. Perhaps
someday it'll be worth providing a cleaner way to do that, but for
now it seems like a very niche problem.
Note that the underlying C functions remain, to support use of the shared
libraries with older versions of the modules' SQL declarations. Someday
we may be able to remove them, but not soon.
Andrey Borodin, reviewed by me
Discussion: https://postgr.es/m/D0F53A05-4F4A-4DEC-8339-3C069FA0EE11@yandex-team.ru
46 lines
1.9 KiB
SQL
46 lines
1.9 KiB
SQL
/* contrib/cube/cube--1.3--1.4.sql */
|
|
|
|
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
|
|
\echo Use "ALTER EXTENSION cube UPDATE TO '1.4'" to load this file. \quit
|
|
|
|
--
|
|
-- Get rid of unnecessary compress and decompress support functions.
|
|
--
|
|
-- To be allowed to drop the opclass entry for a support function,
|
|
-- we must change the entry's dependency type from 'internal' to 'auto',
|
|
-- as though it were a loose member of the opfamily rather than being
|
|
-- bound into a particular opclass. There's no SQL command for that,
|
|
-- so fake it with a manual update on pg_depend.
|
|
--
|
|
UPDATE pg_catalog.pg_depend
|
|
SET deptype = 'a'
|
|
WHERE classid = 'pg_catalog.pg_amproc'::pg_catalog.regclass
|
|
AND objid =
|
|
(SELECT objid
|
|
FROM pg_catalog.pg_depend
|
|
WHERE classid = 'pg_catalog.pg_amproc'::pg_catalog.regclass
|
|
AND refclassid = 'pg_catalog.pg_proc'::pg_catalog.regclass
|
|
AND (refobjid = 'g_cube_compress(pg_catalog.internal)'::pg_catalog.regprocedure))
|
|
AND refclassid = 'pg_catalog.pg_opclass'::pg_catalog.regclass
|
|
AND deptype = 'i';
|
|
|
|
ALTER OPERATOR FAMILY gist_cube_ops USING gist drop function 3 (cube);
|
|
ALTER EXTENSION cube DROP function g_cube_compress(pg_catalog.internal);
|
|
DROP FUNCTION g_cube_compress(pg_catalog.internal);
|
|
|
|
UPDATE pg_catalog.pg_depend
|
|
SET deptype = 'a'
|
|
WHERE classid = 'pg_catalog.pg_amproc'::pg_catalog.regclass
|
|
AND objid =
|
|
(SELECT objid
|
|
FROM pg_catalog.pg_depend
|
|
WHERE classid = 'pg_catalog.pg_amproc'::pg_catalog.regclass
|
|
AND refclassid = 'pg_catalog.pg_proc'::pg_catalog.regclass
|
|
AND (refobjid = 'g_cube_decompress(pg_catalog.internal)'::pg_catalog.regprocedure))
|
|
AND refclassid = 'pg_catalog.pg_opclass'::pg_catalog.regclass
|
|
AND deptype = 'i';
|
|
|
|
ALTER OPERATOR FAMILY gist_cube_ops USING gist drop function 4 (cube);
|
|
ALTER EXTENSION cube DROP function g_cube_decompress(pg_catalog.internal);
|
|
DROP FUNCTION g_cube_decompress(pg_catalog.internal);
|