Fork the pg_repack extension
This commit is contained in:
4
lib/.gitignore
vendored
4
lib/.gitignore
vendored
@ -1,3 +1,3 @@
|
||||
/.deps/
|
||||
/pg_reorg.sql
|
||||
/pg_reorg--[0-9.]*.sql
|
||||
/pg_repack.sql
|
||||
/pg_repack--[0-9.]*.sql
|
||||
|
20
lib/Makefile
20
lib/Makefile
@ -1,13 +1,13 @@
|
||||
#
|
||||
# pg_reorg: lib/Makefile
|
||||
# pg_repack: lib/Makefile
|
||||
#
|
||||
# Portions Copyright (c) 2008-2012, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||
# Portions Copyright (c) 2011, Itagaki Takahiro
|
||||
#
|
||||
MODULE_big = pg_reorg
|
||||
OBJS = reorg.o pgut/pgut-be.o pgut/pgut-spi.o
|
||||
MODULE_big = pg_repack
|
||||
OBJS = repack.o pgut/pgut-be.o pgut/pgut-spi.o
|
||||
|
||||
EXTENSION = pg_reorg
|
||||
EXTENSION = pg_repack
|
||||
|
||||
# The version of the extension, read from the .control file.
|
||||
# Note that it doesn't need to be the same of the library version: it should
|
||||
@ -16,8 +16,8 @@ EXTVER = $(shell grep -e '^default_version' $(EXTENSION).control \
|
||||
| sed -e "s/[^']*'\([^']*\)'.*/\1/")
|
||||
|
||||
#supports both EXTENSION (for >=9.1) and without_EXTENSION (for <PG 9.1)
|
||||
DATA_built = pg_reorg.sql pg_reorg--$(EXTVER).sql
|
||||
DATA = pg_reorg--1.1.7--1.1.8.sql uninstall_pg_reorg.sql
|
||||
DATA_built = pg_repack.sql pg_repack--$(EXTVER).sql
|
||||
DATA = pg_repack--1.1.7--1.1.8.sql uninstall_pg_repack.sql
|
||||
|
||||
ifndef USE_PGXS
|
||||
top_builddir = ../../..
|
||||
@ -41,12 +41,12 @@ endif
|
||||
LIBS := $(filter-out -lxml2, $(LIBS))
|
||||
LIBS := $(filter-out -lxslt, $(LIBS))
|
||||
|
||||
pg_reorg.sql: pg_reorg.sql.in
|
||||
pg_repack.sql: pg_repack.sql.in
|
||||
echo "BEGIN;\n" > $@; \
|
||||
echo "CREATE SCHEMA reorg;\n" >> $@; \
|
||||
echo "CREATE SCHEMA repack;\n" >> $@; \
|
||||
sed 's,MODULE_PATHNAME,$$libdir/$(MODULE_big),g' $< >> $@; \
|
||||
echo "\nCOMMIT;" >> $@;
|
||||
|
||||
pg_reorg--$(EXTVER).sql: pg_reorg.sql.in
|
||||
echo '\echo Use "CREATE EXTENSION pg_reorg" to load this file. \quit' > $@; \
|
||||
pg_repack--$(EXTVER).sql: pg_repack.sql.in
|
||||
echo '\echo Use "CREATE EXTENSION pg_repack" to load this file. \quit' > $@; \
|
||||
cat $< >> $@;
|
||||
|
@ -1,25 +0,0 @@
|
||||
/* Create the pg_reorg extension from a loose set of objects */
|
||||
|
||||
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||
\echo Use "CREATE EXTENSION pg_reorg FROM 1.1.7" to load this file. \quit
|
||||
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.version();
|
||||
ALTER EXTENSION pg_reorg ADD AGGREGATE reorg.array_accum(anyelement);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.oid2text(oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_index_columns(oid, text);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_index_keys(oid, oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_create_index_type(oid, name);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_create_trigger(relid oid, pkid oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_assign(oid, text);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_compare_pkey(oid, text);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_columns_for_create_as(oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.get_drop_columns(oid, text);
|
||||
ALTER EXTENSION pg_reorg ADD VIEW reorg.primary_keys;
|
||||
ALTER EXTENSION pg_reorg ADD VIEW reorg.tables;
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.reorg_indexdef(oid, oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.reorg_trigger();
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.conflicted_triggers(oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.disable_autovacuum(regclass);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.reorg_apply(cstring,cstring,cstring,cstring,cstring,integer);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.reorg_swap(oid);
|
||||
ALTER EXTENSION pg_reorg ADD FUNCTION reorg.reorg_drop(oid);
|
25
lib/pg_repack--1.1.7--1.1.8.sql
Normal file
25
lib/pg_repack--1.1.7--1.1.8.sql
Normal file
@ -0,0 +1,25 @@
|
||||
/* Create the pg_repack extension from a loose set of objects */
|
||||
|
||||
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||
\echo Use "CREATE EXTENSION pg_repack FROM 1.1.7" to load this file. \quit
|
||||
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.version();
|
||||
ALTER EXTENSION pg_repack ADD AGGREGATE repack.array_accum(anyelement);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.oid2text(oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_index_columns(oid, text);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_index_keys(oid, oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_create_index_type(oid, name);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_create_trigger(relid oid, pkid oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_assign(oid, text);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_compare_pkey(oid, text);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_columns_for_create_as(oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.get_drop_columns(oid, text);
|
||||
ALTER EXTENSION pg_repack ADD VIEW repack.primary_keys;
|
||||
ALTER EXTENSION pg_repack ADD VIEW repack.tables;
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.repack_indexdef(oid, oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.repack_trigger();
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.conflicted_triggers(oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.disable_autovacuum(regclass);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.repack_apply(cstring,cstring,cstring,cstring,cstring,integer);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.repack_swap(oid);
|
||||
ALTER EXTENSION pg_repack ADD FUNCTION repack.repack_drop(oid);
|
@ -1,6 +1,6 @@
|
||||
# pg_reorg extension
|
||||
# pg_repack extension
|
||||
comment = 're-organizes a PostgreSQL database'
|
||||
default_version = '1.2dev0'
|
||||
module_pathname = '$libdir/pg_reorg'
|
||||
module_pathname = '$libdir/pg_repack'
|
||||
relocatable = false
|
||||
schema = reorg
|
||||
schema = repack
|
@ -1,30 +1,30 @@
|
||||
/*
|
||||
* pg_reorg: lib/pg_reorg.sql.in
|
||||
* pg_repack: lib/pg_repack.sql.in
|
||||
*
|
||||
* Portions Copyright (c) 2008-2011, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||
* Portions Copyright (c) 2011, Itagaki Takahiro
|
||||
*/
|
||||
|
||||
CREATE FUNCTION reorg.version() RETURNS text AS
|
||||
'MODULE_PATHNAME', 'reorg_version'
|
||||
CREATE FUNCTION repack.version() RETURNS text AS
|
||||
'MODULE_PATHNAME', 'repack_version'
|
||||
LANGUAGE C IMMUTABLE STRICT;
|
||||
|
||||
CREATE AGGREGATE reorg.array_accum (
|
||||
CREATE AGGREGATE repack.array_accum (
|
||||
sfunc = array_append,
|
||||
basetype = anyelement,
|
||||
stype = anyarray,
|
||||
initcond = '{}'
|
||||
);
|
||||
|
||||
CREATE FUNCTION reorg.oid2text(oid) RETURNS text AS
|
||||
CREATE FUNCTION repack.oid2text(oid) RETURNS text AS
|
||||
$$
|
||||
SELECT textin(regclassout($1));
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_index_columns(oid, text) RETURNS text AS
|
||||
CREATE FUNCTION repack.get_index_columns(oid, text) RETURNS text AS
|
||||
$$
|
||||
SELECT array_to_string(reorg.array_accum(quote_ident(attname)), $2)
|
||||
SELECT array_to_string(repack.array_accum(quote_ident(attname)), $2)
|
||||
FROM pg_attribute,
|
||||
(SELECT indrelid,
|
||||
indkey,
|
||||
@ -37,14 +37,14 @@ $$
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_index_keys(oid, oid) RETURNS text AS
|
||||
'MODULE_PATHNAME', 'reorg_get_index_keys'
|
||||
CREATE FUNCTION repack.get_index_keys(oid, oid) RETURNS text AS
|
||||
'MODULE_PATHNAME', 'repack_get_index_keys'
|
||||
LANGUAGE C STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_create_index_type(oid, name) RETURNS text AS
|
||||
CREATE FUNCTION repack.get_create_index_type(oid, name) RETURNS text AS
|
||||
$$
|
||||
SELECT 'CREATE TYPE ' || $2 || ' AS (' ||
|
||||
array_to_string(reorg.array_accum(quote_ident(attname) || ' ' ||
|
||||
array_to_string(repack.array_accum(quote_ident(attname) || ' ' ||
|
||||
pg_catalog.format_type(atttypid, atttypmod)), ', ') || ')'
|
||||
FROM pg_attribute,
|
||||
(SELECT indrelid,
|
||||
@ -58,44 +58,44 @@ $$
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_create_trigger(relid oid, pkid oid)
|
||||
CREATE FUNCTION repack.get_create_trigger(relid oid, pkid oid)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT 'CREATE TRIGGER z_reorg_trigger' ||
|
||||
' BEFORE INSERT OR DELETE OR UPDATE ON ' || reorg.oid2text($1) ||
|
||||
' FOR EACH ROW EXECUTE PROCEDURE reorg.reorg_trigger(' ||
|
||||
'''INSERT INTO reorg.log_' || $1 || '(pk, row) VALUES(' ||
|
||||
SELECT 'CREATE TRIGGER z_repack_trigger' ||
|
||||
' BEFORE INSERT OR DELETE OR UPDATE ON ' || repack.oid2text($1) ||
|
||||
' FOR EACH ROW EXECUTE PROCEDURE repack.repack_trigger(' ||
|
||||
'''INSERT INTO repack.log_' || $1 || '(pk, row) VALUES(' ||
|
||||
' CASE WHEN $1 IS NULL THEN NULL ELSE (ROW($1.' ||
|
||||
reorg.get_index_columns($2, ', $1.') || ')::reorg.pk_' ||
|
||||
repack.get_index_columns($2, ', $1.') || ')::repack.pk_' ||
|
||||
$1 || ') END, $2)'')';
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_alter_table(relid oid)
|
||||
CREATE FUNCTION repack.get_alter_table(relid oid)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT 'ALTER TABLE ' || reorg.oid2text($1) ||
|
||||
' ENABLE ALWAYS TRIGGER z_reorg_trigger';
|
||||
SELECT 'ALTER TABLE ' || repack.oid2text($1) ||
|
||||
' ENABLE ALWAYS TRIGGER z_repack_trigger';
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_assign(oid, text) RETURNS text AS
|
||||
CREATE FUNCTION repack.get_assign(oid, text) RETURNS text AS
|
||||
$$
|
||||
SELECT '(' || array_to_string(reorg.array_accum(quote_ident(attname)), ', ') ||
|
||||
SELECT '(' || array_to_string(repack.array_accum(quote_ident(attname)), ', ') ||
|
||||
') = (' || $2 || '.' ||
|
||||
array_to_string(reorg.array_accum(quote_ident(attname)), ', ' || $2 || '.') || ')'
|
||||
array_to_string(repack.array_accum(quote_ident(attname)), ', ' || $2 || '.') || ')'
|
||||
FROM (SELECT attname FROM pg_attribute
|
||||
WHERE attrelid = $1 AND attnum > 0 AND NOT attisdropped
|
||||
ORDER BY attnum) tmp;
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.get_compare_pkey(oid, text)
|
||||
CREATE FUNCTION repack.get_compare_pkey(oid, text)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT '(' || array_to_string(reorg.array_accum(quote_ident(attname)), ', ') ||
|
||||
SELECT '(' || array_to_string(repack.array_accum(quote_ident(attname)), ', ') ||
|
||||
') = (' || $2 || '.' ||
|
||||
array_to_string(reorg.array_accum(quote_ident(attname)), ', ' || $2 || '.') || ')'
|
||||
array_to_string(repack.array_accum(quote_ident(attname)), ', ' || $2 || '.') || ')'
|
||||
FROM pg_attribute,
|
||||
(SELECT indrelid,
|
||||
indkey,
|
||||
@ -110,10 +110,10 @@ LANGUAGE sql STABLE STRICT;
|
||||
|
||||
-- Get a column list for SELECT all columns including dropped ones.
|
||||
-- We use NULLs of integer types for dropped columns (types are not important).
|
||||
CREATE FUNCTION reorg.get_columns_for_create_as(oid)
|
||||
CREATE FUNCTION repack.get_columns_for_create_as(oid)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT array_to_string(reorg.array_accum(c), ',') FROM (SELECT
|
||||
SELECT array_to_string(repack.array_accum(c), ',') FROM (SELECT
|
||||
CASE WHEN attisdropped
|
||||
THEN 'NULL::integer AS ' || quote_ident(attname)
|
||||
ELSE quote_ident(attname)
|
||||
@ -126,14 +126,14 @@ LANGUAGE sql STABLE STRICT;
|
||||
|
||||
-- Get a SQL text to DROP dropped columns for the table,
|
||||
-- or NULL if it has no dropped columns.
|
||||
CREATE FUNCTION reorg.get_drop_columns(oid, text)
|
||||
CREATE FUNCTION repack.get_drop_columns(oid, text)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT
|
||||
'ALTER TABLE ' || $2 || ' ' || array_to_string(dropped_columns, ', ')
|
||||
FROM (
|
||||
SELECT
|
||||
reorg.array_accum('DROP COLUMN ' || quote_ident(attname)) AS dropped_columns
|
||||
repack.array_accum('DROP COLUMN ' || quote_ident(attname)) AS dropped_columns
|
||||
FROM (
|
||||
SELECT * FROM pg_attribute
|
||||
WHERE attrelid = $1 AND attnum > 0 AND attisdropped
|
||||
@ -146,8 +146,8 @@ $$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
-- includes not only PRIMARY KEYS but also UNIQUE NOT NULL keys
|
||||
CREATE VIEW reorg.primary_keys AS
|
||||
SELECT indrelid, (reorg.array_accum(indexrelid))[1] AS indexrelid
|
||||
CREATE VIEW repack.primary_keys AS
|
||||
SELECT indrelid, (repack.array_accum(indexrelid))[1] AS indexrelid
|
||||
FROM (SELECT indrelid, indexrelid FROM pg_index
|
||||
WHERE indisunique
|
||||
AND indisvalid
|
||||
@ -160,30 +160,30 @@ CREATE VIEW reorg.primary_keys AS
|
||||
ORDER BY indrelid, indisprimary DESC, indnatts, indkey) tmp
|
||||
GROUP BY indrelid;
|
||||
|
||||
CREATE VIEW reorg.tables AS
|
||||
CREATE VIEW repack.tables AS
|
||||
SELECT R.oid::regclass AS relname,
|
||||
R.oid AS relid,
|
||||
R.reltoastrelid AS reltoastrelid,
|
||||
CASE WHEN R.reltoastrelid = 0 THEN 0 ELSE (SELECT reltoastidxid FROM pg_class WHERE oid = R.reltoastrelid) END AS reltoastidxid,
|
||||
PK.indexrelid AS pkid,
|
||||
CK.indexrelid AS ckid,
|
||||
reorg.get_create_index_type(PK.indexrelid, 'reorg.pk_' || R.oid) AS create_pktype,
|
||||
'CREATE TABLE reorg.log_' || R.oid || ' (id bigserial PRIMARY KEY, pk reorg.pk_' || R.oid || ', row ' || reorg.oid2text(R.oid) || ')' AS create_log,
|
||||
reorg.get_create_trigger(R.oid, PK.indexrelid) AS create_trigger,
|
||||
reorg.get_alter_table(R.oid) as alter_table,
|
||||
'CREATE TABLE reorg.table_' || R.oid || ' WITH (' || array_to_string(array_append(R.reloptions, 'oids=' || CASE WHEN R.relhasoids THEN 'true' ELSE 'false' END), ',') || ') TABLESPACE ' || coalesce(quote_ident(S.spcname), 'pg_default') || ' AS SELECT ' || reorg.get_columns_for_create_as(R.oid) || ' FROM ONLY ' || reorg.oid2text(R.oid) AS create_table,
|
||||
reorg.get_drop_columns(R.oid, 'reorg.table_' || R.oid) AS drop_columns,
|
||||
'DELETE FROM reorg.log_' || R.oid AS delete_log,
|
||||
'LOCK TABLE ' || reorg.oid2text(R.oid) || ' IN ACCESS EXCLUSIVE MODE' AS lock_table,
|
||||
reorg.get_index_keys(CK.indexrelid, R.oid) AS ckey,
|
||||
'SELECT * FROM reorg.log_' || R.oid || ' ORDER BY id LIMIT $1' AS sql_peek,
|
||||
'INSERT INTO reorg.table_' || R.oid || ' VALUES ($1.*)' AS sql_insert,
|
||||
'DELETE FROM reorg.table_' || R.oid || ' WHERE ' || reorg.get_compare_pkey(PK.indexrelid, '$1') AS sql_delete,
|
||||
'UPDATE reorg.table_' || R.oid || ' SET ' || reorg.get_assign(R.oid, '$2') || ' WHERE ' || reorg.get_compare_pkey(PK.indexrelid, '$1') AS sql_update,
|
||||
'DELETE FROM reorg.log_' || R.oid || ' WHERE id <= $1' AS sql_pop
|
||||
repack.get_create_index_type(PK.indexrelid, 'repack.pk_' || R.oid) AS create_pktype,
|
||||
'CREATE TABLE repack.log_' || R.oid || ' (id bigserial PRIMARY KEY, pk repack.pk_' || R.oid || ', row ' || repack.oid2text(R.oid) || ')' AS create_log,
|
||||
repack.get_create_trigger(R.oid, PK.indexrelid) AS create_trigger,
|
||||
repack.get_alter_table(R.oid) as alter_table,
|
||||
'CREATE TABLE repack.table_' || R.oid || ' WITH (' || array_to_string(array_append(R.reloptions, 'oids=' || CASE WHEN R.relhasoids THEN 'true' ELSE 'false' END), ',') || ') TABLESPACE ' || coalesce(quote_ident(S.spcname), 'pg_default') || ' AS SELECT ' || repack.get_columns_for_create_as(R.oid) || ' FROM ONLY ' || repack.oid2text(R.oid) AS create_table,
|
||||
repack.get_drop_columns(R.oid, 'repack.table_' || R.oid) AS drop_columns,
|
||||
'DELETE FROM repack.log_' || R.oid AS delete_log,
|
||||
'LOCK TABLE ' || repack.oid2text(R.oid) || ' IN ACCESS EXCLUSIVE MODE' AS lock_table,
|
||||
repack.get_index_keys(CK.indexrelid, R.oid) AS ckey,
|
||||
'SELECT * FROM repack.log_' || R.oid || ' ORDER BY id LIMIT $1' AS sql_peek,
|
||||
'INSERT INTO repack.table_' || R.oid || ' VALUES ($1.*)' AS sql_insert,
|
||||
'DELETE FROM repack.table_' || R.oid || ' WHERE ' || repack.get_compare_pkey(PK.indexrelid, '$1') AS sql_delete,
|
||||
'UPDATE repack.table_' || R.oid || ' SET ' || repack.get_assign(R.oid, '$2') || ' WHERE ' || repack.get_compare_pkey(PK.indexrelid, '$1') AS sql_update,
|
||||
'DELETE FROM repack.log_' || R.oid || ' WHERE id <= $1' AS sql_pop
|
||||
FROM pg_class R
|
||||
LEFT JOIN pg_class T ON R.reltoastrelid = T.oid
|
||||
LEFT JOIN reorg.primary_keys PK
|
||||
LEFT JOIN repack.primary_keys PK
|
||||
ON R.oid = PK.indrelid
|
||||
LEFT JOIN (SELECT CKI.* FROM pg_index CKI, pg_class CKT
|
||||
WHERE CKI.indisvalid
|
||||
@ -197,26 +197,26 @@ CREATE VIEW reorg.tables AS
|
||||
AND N.nspname NOT IN ('pg_catalog', 'information_schema')
|
||||
AND N.nspname NOT LIKE E'pg\\_temp\\_%';
|
||||
|
||||
CREATE FUNCTION reorg.reorg_indexdef(oid, oid) RETURNS text AS
|
||||
'MODULE_PATHNAME', 'reorg_indexdef'
|
||||
CREATE FUNCTION repack.repack_indexdef(oid, oid) RETURNS text AS
|
||||
'MODULE_PATHNAME', 'repack_indexdef'
|
||||
LANGUAGE C STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.reorg_trigger() RETURNS trigger AS
|
||||
'MODULE_PATHNAME', 'reorg_trigger'
|
||||
CREATE FUNCTION repack.repack_trigger() RETURNS trigger AS
|
||||
'MODULE_PATHNAME', 'repack_trigger'
|
||||
LANGUAGE C VOLATILE STRICT SECURITY DEFINER;
|
||||
|
||||
CREATE FUNCTION reorg.conflicted_triggers(oid) RETURNS SETOF name AS
|
||||
CREATE FUNCTION repack.conflicted_triggers(oid) RETURNS SETOF name AS
|
||||
$$
|
||||
SELECT tgname FROM pg_trigger
|
||||
WHERE tgrelid = $1 AND tgname >= 'z_reorg_trigger'
|
||||
WHERE tgrelid = $1 AND tgname >= 'z_repack_trigger'
|
||||
$$
|
||||
LANGUAGE sql STABLE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.disable_autovacuum(regclass) RETURNS void AS
|
||||
'MODULE_PATHNAME', 'reorg_disable_autovacuum'
|
||||
CREATE FUNCTION repack.disable_autovacuum(regclass) RETURNS void AS
|
||||
'MODULE_PATHNAME', 'repack_disable_autovacuum'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.reorg_apply(
|
||||
CREATE FUNCTION repack.repack_apply(
|
||||
sql_peek cstring,
|
||||
sql_insert cstring,
|
||||
sql_delete cstring,
|
||||
@ -224,13 +224,13 @@ CREATE FUNCTION reorg.reorg_apply(
|
||||
sql_pop cstring,
|
||||
count integer)
|
||||
RETURNS integer AS
|
||||
'MODULE_PATHNAME', 'reorg_apply'
|
||||
'MODULE_PATHNAME', 'repack_apply'
|
||||
LANGUAGE C VOLATILE;
|
||||
|
||||
CREATE FUNCTION reorg.reorg_swap(oid) RETURNS void AS
|
||||
'MODULE_PATHNAME', 'reorg_swap'
|
||||
CREATE FUNCTION repack.repack_swap(oid) RETURNS void AS
|
||||
'MODULE_PATHNAME', 'repack_swap'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE FUNCTION reorg.reorg_drop(oid) RETURNS void AS
|
||||
'MODULE_PATHNAME', 'reorg_drop'
|
||||
CREATE FUNCTION repack.repack_drop(oid) RETURNS void AS
|
||||
'MODULE_PATHNAME', 'repack_drop'
|
||||
LANGUAGE C VOLATILE STRICT;
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* pg_reorg: lib/reorg.c
|
||||
* pg_repack: lib/repack.c
|
||||
*
|
||||
* Portions Copyright (c) 2008-2011, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||
* Portions Copyright (c) 2011, Itagaki Takahiro
|
||||
@ -37,26 +37,26 @@
|
||||
|
||||
PG_MODULE_MAGIC;
|
||||
|
||||
extern Datum PGUT_EXPORT reorg_version(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_trigger(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_apply(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_get_index_keys(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_indexdef(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_swap(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_drop(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT reorg_disable_autovacuum(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_version(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_trigger(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_apply(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_get_index_keys(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_indexdef(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_swap(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_drop(PG_FUNCTION_ARGS);
|
||||
extern Datum PGUT_EXPORT repack_disable_autovacuum(PG_FUNCTION_ARGS);
|
||||
|
||||
PG_FUNCTION_INFO_V1(reorg_version);
|
||||
PG_FUNCTION_INFO_V1(reorg_trigger);
|
||||
PG_FUNCTION_INFO_V1(reorg_apply);
|
||||
PG_FUNCTION_INFO_V1(reorg_get_index_keys);
|
||||
PG_FUNCTION_INFO_V1(reorg_indexdef);
|
||||
PG_FUNCTION_INFO_V1(reorg_swap);
|
||||
PG_FUNCTION_INFO_V1(reorg_drop);
|
||||
PG_FUNCTION_INFO_V1(reorg_disable_autovacuum);
|
||||
PG_FUNCTION_INFO_V1(repack_version);
|
||||
PG_FUNCTION_INFO_V1(repack_trigger);
|
||||
PG_FUNCTION_INFO_V1(repack_apply);
|
||||
PG_FUNCTION_INFO_V1(repack_get_index_keys);
|
||||
PG_FUNCTION_INFO_V1(repack_indexdef);
|
||||
PG_FUNCTION_INFO_V1(repack_swap);
|
||||
PG_FUNCTION_INFO_V1(repack_drop);
|
||||
PG_FUNCTION_INFO_V1(repack_disable_autovacuum);
|
||||
|
||||
static void reorg_init(void);
|
||||
static SPIPlanPtr reorg_prepare(const char *src, int nargs, Oid *argtypes);
|
||||
static void repack_init(void);
|
||||
static SPIPlanPtr repack_prepare(const char *src, int nargs, Oid *argtypes);
|
||||
static const char *get_quoted_relname(Oid oid);
|
||||
static const char *get_quoted_nspname(Oid oid);
|
||||
static void swap_heap_or_index_files(Oid r1, Oid r2);
|
||||
@ -95,21 +95,21 @@ static void RenameRelationInternal(Oid myrelid, const char *newrelname, Oid name
|
||||
|
||||
|
||||
Datum
|
||||
reorg_version(PG_FUNCTION_ARGS)
|
||||
repack_version(PG_FUNCTION_ARGS)
|
||||
{
|
||||
return CStringGetTextDatum("pg_reorg 1.1.6");
|
||||
return CStringGetTextDatum("pg_repack 1.1.6");
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Datum reorg_trigger(PG_FUNCTION_ARGS)
|
||||
* @fn Datum repack_trigger(PG_FUNCTION_ARGS)
|
||||
* @brief Insert a operation log into log-table.
|
||||
*
|
||||
* reorg_trigger(sql)
|
||||
* repack_trigger(sql)
|
||||
*
|
||||
* @param sql SQL to insert a operation log into log-table.
|
||||
*/
|
||||
Datum
|
||||
reorg_trigger(PG_FUNCTION_ARGS)
|
||||
repack_trigger(PG_FUNCTION_ARGS)
|
||||
{
|
||||
TriggerData *trigdata = (TriggerData *) fcinfo->context;
|
||||
TupleDesc desc;
|
||||
@ -120,14 +120,14 @@ reorg_trigger(PG_FUNCTION_ARGS)
|
||||
const char *sql;
|
||||
|
||||
/* authority check */
|
||||
must_be_superuser("reorg_trigger");
|
||||
must_be_superuser("repack_trigger");
|
||||
|
||||
/* make sure it's called as a trigger at all */
|
||||
if (!CALLED_AS_TRIGGER(fcinfo) ||
|
||||
!TRIGGER_FIRED_BEFORE(trigdata->tg_event) ||
|
||||
!TRIGGER_FIRED_FOR_ROW(trigdata->tg_event) ||
|
||||
trigdata->tg_trigger->tgnargs != 1)
|
||||
elog(ERROR, "reorg_trigger: invalid trigger call");
|
||||
elog(ERROR, "repack_trigger: invalid trigger call");
|
||||
|
||||
/* retrieve parameters */
|
||||
sql = trigdata->tg_trigger->tgargs[0];
|
||||
@ -135,7 +135,7 @@ reorg_trigger(PG_FUNCTION_ARGS)
|
||||
argtypes[0] = argtypes[1] = trigdata->tg_relation->rd_rel->reltype;
|
||||
|
||||
/* connect to SPI manager */
|
||||
reorg_init();
|
||||
repack_init();
|
||||
|
||||
if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event))
|
||||
{
|
||||
@ -159,7 +159,7 @@ reorg_trigger(PG_FUNCTION_ARGS)
|
||||
values[1] = copy_tuple(tuple, desc);
|
||||
}
|
||||
|
||||
/* INSERT INTO reorg.log VALUES ($1, $2) */
|
||||
/* INSERT INTO repack.log VALUES ($1, $2) */
|
||||
execute_with_args(SPI_OK_INSERT, sql, 2, argtypes, values, nulls);
|
||||
|
||||
SPI_finish();
|
||||
@ -168,10 +168,10 @@ reorg_trigger(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Datum reorg_apply(PG_FUNCTION_ARGS)
|
||||
* @fn Datum repack_apply(PG_FUNCTION_ARGS)
|
||||
* @brief Apply operations in log table into temp table.
|
||||
*
|
||||
* reorg_apply(sql_peek, sql_insert, sql_delete, sql_update, sql_pop, count)
|
||||
* repack_apply(sql_peek, sql_insert, sql_delete, sql_update, sql_pop, count)
|
||||
*
|
||||
* @param sql_peek SQL to pop tuple from log table.
|
||||
* @param sql_insert SQL to insert into temp table.
|
||||
@ -182,7 +182,7 @@ reorg_trigger(PG_FUNCTION_ARGS)
|
||||
* @retval Number of performed operations.
|
||||
*/
|
||||
Datum
|
||||
reorg_apply(PG_FUNCTION_ARGS)
|
||||
repack_apply(PG_FUNCTION_ARGS)
|
||||
{
|
||||
#define DEFAULT_PEEK_COUNT 1000
|
||||
|
||||
@ -204,13 +204,13 @@ reorg_apply(PG_FUNCTION_ARGS)
|
||||
bool nulls_peek[1] = { 0 };
|
||||
|
||||
/* authority check */
|
||||
must_be_superuser("reorg_apply");
|
||||
must_be_superuser("repack_apply");
|
||||
|
||||
/* connect to SPI manager */
|
||||
reorg_init();
|
||||
repack_init();
|
||||
|
||||
/* peek tuple in log */
|
||||
plan_peek = reorg_prepare(sql_peek, 1, argtypes_peek);
|
||||
plan_peek = repack_prepare(sql_peek, 1, argtypes_peek);
|
||||
|
||||
for (n = 0;;)
|
||||
{
|
||||
@ -252,28 +252,28 @@ reorg_apply(PG_FUNCTION_ARGS)
|
||||
{
|
||||
/* INSERT */
|
||||
if (plan_insert == NULL)
|
||||
plan_insert = reorg_prepare(sql_insert, 1, &argtypes[2]);
|
||||
plan_insert = repack_prepare(sql_insert, 1, &argtypes[2]);
|
||||
execute_plan(SPI_OK_INSERT, plan_insert, &values[2], &nulls[2]);
|
||||
}
|
||||
else if (nulls[2])
|
||||
{
|
||||
/* DELETE */
|
||||
if (plan_delete == NULL)
|
||||
plan_delete = reorg_prepare(sql_delete, 1, &argtypes[1]);
|
||||
plan_delete = repack_prepare(sql_delete, 1, &argtypes[1]);
|
||||
execute_plan(SPI_OK_DELETE, plan_delete, &values[1], &nulls[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* UPDATE */
|
||||
if (plan_update == NULL)
|
||||
plan_update = reorg_prepare(sql_update, 2, &argtypes[1]);
|
||||
plan_update = repack_prepare(sql_update, 2, &argtypes[1]);
|
||||
execute_plan(SPI_OK_UPDATE, plan_update, &values[1], &nulls[1]);
|
||||
}
|
||||
}
|
||||
|
||||
/* delete tuple in log */
|
||||
if (plan_pop == NULL)
|
||||
plan_pop = reorg_prepare(sql_pop, 1, argtypes);
|
||||
plan_pop = repack_prepare(sql_pop, 1, argtypes);
|
||||
execute_plan(SPI_OK_DELETE, plan_pop, values, nulls);
|
||||
|
||||
SPI_freetuptable(tuptable);
|
||||
@ -464,10 +464,10 @@ parse_indexdef(IndexDef *stmt, Oid index, Oid table)
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Datum reorg_get_index_keys(PG_FUNCTION_ARGS)
|
||||
* @fn Datum repack_get_index_keys(PG_FUNCTION_ARGS)
|
||||
* @brief Get key definition of the index.
|
||||
*
|
||||
* reorg_get_index_keys(index, table)
|
||||
* repack_get_index_keys(index, table)
|
||||
*
|
||||
* @param index Oid of target index.
|
||||
* @param table Oid of table of the index.
|
||||
@ -477,7 +477,7 @@ parse_indexdef(IndexDef *stmt, Oid index, Oid table)
|
||||
* an expression for ORDER BY clause. get_order_by() might be a better name.
|
||||
*/
|
||||
Datum
|
||||
reorg_get_index_keys(PG_FUNCTION_ARGS)
|
||||
repack_get_index_keys(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid index = PG_GETARG_OID(0);
|
||||
Oid table = PG_GETARG_OID(1);
|
||||
@ -564,17 +564,17 @@ reorg_get_index_keys(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Datum reorg_indexdef(PG_FUNCTION_ARGS)
|
||||
* @fn Datum repack_indexdef(PG_FUNCTION_ARGS)
|
||||
* @brief Reproduce DDL that create index at the temp table.
|
||||
*
|
||||
* reorg_indexdef(index, table)
|
||||
* repack_indexdef(index, table)
|
||||
*
|
||||
* @param index Oid of target index.
|
||||
* @param table Oid of table of the index.
|
||||
* @retval Create index DDL for temp table.
|
||||
*/
|
||||
Datum
|
||||
reorg_indexdef(PG_FUNCTION_ARGS)
|
||||
repack_indexdef(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid index = PG_GETARG_OID(0);
|
||||
Oid table = PG_GETARG_OID(1);
|
||||
@ -583,7 +583,7 @@ reorg_indexdef(PG_FUNCTION_ARGS)
|
||||
|
||||
parse_indexdef(&stmt, index, table);
|
||||
initStringInfo(&str);
|
||||
appendStringInfo(&str, "%s index_%u ON reorg.table_%u USING %s (%s)%s",
|
||||
appendStringInfo(&str, "%s index_%u ON repack.table_%u USING %s (%s)%s",
|
||||
stmt.create, index, table, stmt.type, stmt.columns, stmt.options);
|
||||
|
||||
PG_RETURN_TEXT_P(cstring_to_text(str.data));
|
||||
@ -598,11 +598,11 @@ getoid(HeapTuple tuple, TupleDesc desc, int column)
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Datum reorg_swap(PG_FUNCTION_ARGS)
|
||||
* @fn Datum repack_swap(PG_FUNCTION_ARGS)
|
||||
* @brief Swapping relfilenode of tables and relation ids of toast tables
|
||||
* and toast indexes.
|
||||
*
|
||||
* reorg_swap(oid, relname)
|
||||
* repack_swap(oid, relname)
|
||||
*
|
||||
* TODO: remove useless CommandCounterIncrement().
|
||||
*
|
||||
@ -610,7 +610,7 @@ getoid(HeapTuple tuple, TupleDesc desc, int column)
|
||||
* @retval None.
|
||||
*/
|
||||
Datum
|
||||
reorg_swap(PG_FUNCTION_ARGS)
|
||||
repack_swap(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid oid = PG_GETARG_OID(0);
|
||||
const char *relname = get_quoted_relname(oid);
|
||||
@ -633,10 +633,10 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
Oid owner2;
|
||||
|
||||
/* authority check */
|
||||
must_be_superuser("reorg_swap");
|
||||
must_be_superuser("repack_swap");
|
||||
|
||||
/* connect to SPI manager */
|
||||
reorg_init();
|
||||
repack_init();
|
||||
|
||||
/* swap relfilenode and dependencies for tables. */
|
||||
values[0] = ObjectIdGetDatum(oid);
|
||||
@ -648,7 +648,7 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
" pg_catalog.pg_class Y LEFT JOIN pg_catalog.pg_class TY"
|
||||
" ON Y.reltoastrelid = TY.oid"
|
||||
" WHERE X.oid = $1"
|
||||
" AND Y.oid = ('reorg.table_' || X.oid)::regclass",
|
||||
" AND Y.oid = ('repack.table_' || X.oid)::regclass",
|
||||
1, argtypes, values, nulls);
|
||||
|
||||
tuptable = SPI_tuptable;
|
||||
@ -656,7 +656,7 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
records = SPI_processed;
|
||||
|
||||
if (records == 0)
|
||||
elog(ERROR, "reorg_swap : no swap target");
|
||||
elog(ERROR, "repack_swap : no swap target");
|
||||
|
||||
tuple = tuptable->vals[0];
|
||||
|
||||
@ -689,7 +689,7 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
" WHERE I.indrelid = $1"
|
||||
" AND I.indexrelid = X.oid"
|
||||
" AND I.indisvalid"
|
||||
" AND Y.oid = ('reorg.index_' || X.oid)::regclass",
|
||||
" AND Y.oid = ('repack.index_' || X.oid)::regclass",
|
||||
1, argtypes, values, nulls);
|
||||
|
||||
tuptable = SPI_tuptable;
|
||||
@ -714,7 +714,7 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
if (reltoastidxid1 != InvalidOid ||
|
||||
reltoastrelid2 != InvalidOid ||
|
||||
reltoastidxid2 != InvalidOid)
|
||||
elog(ERROR, "reorg_swap : unexpected toast relations (T1=%u, I1=%u, T2=%u, I2=%u",
|
||||
elog(ERROR, "repack_swap : unexpected toast relations (T1=%u, I1=%u, T2=%u, I2=%u",
|
||||
reltoastrelid1, reltoastidxid1, reltoastrelid2, reltoastidxid2);
|
||||
/* do nothing */
|
||||
}
|
||||
@ -724,7 +724,7 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
|
||||
if (reltoastidxid1 == InvalidOid ||
|
||||
reltoastidxid2 != InvalidOid)
|
||||
elog(ERROR, "reorg_swap : unexpected toast relations (T1=%u, I1=%u, T2=%u, I2=%u",
|
||||
elog(ERROR, "repack_swap : unexpected toast relations (T1=%u, I1=%u, T2=%u, I2=%u",
|
||||
reltoastrelid1, reltoastidxid1, reltoastrelid2, reltoastidxid2);
|
||||
|
||||
/* rename X to Y */
|
||||
@ -761,10 +761,10 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
CommandCounterIncrement();
|
||||
}
|
||||
|
||||
/* drop reorg trigger */
|
||||
/* drop repack trigger */
|
||||
execute_with_format(
|
||||
SPI_OK_UTILITY,
|
||||
"DROP TRIGGER IF EXISTS z_reorg_trigger ON %s.%s CASCADE",
|
||||
"DROP TRIGGER IF EXISTS z_repack_trigger ON %s.%s CASCADE",
|
||||
nspname, relname);
|
||||
|
||||
SPI_finish();
|
||||
@ -773,34 +773,34 @@ reorg_swap(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Datum reorg_drop(PG_FUNCTION_ARGS)
|
||||
* @fn Datum repack_drop(PG_FUNCTION_ARGS)
|
||||
* @brief Delete temporarily objects.
|
||||
*
|
||||
* reorg_drop(oid, relname)
|
||||
* repack_drop(oid, relname)
|
||||
*
|
||||
* @param oid Oid of target table.
|
||||
* @retval None.
|
||||
*/
|
||||
Datum
|
||||
reorg_drop(PG_FUNCTION_ARGS)
|
||||
repack_drop(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid oid = PG_GETARG_OID(0);
|
||||
const char *relname = get_quoted_relname(oid);
|
||||
const char *nspname = get_quoted_nspname(oid);
|
||||
|
||||
/* authority check */
|
||||
must_be_superuser("reorg_drop");
|
||||
must_be_superuser("repack_drop");
|
||||
|
||||
/* connect to SPI manager */
|
||||
reorg_init();
|
||||
repack_init();
|
||||
|
||||
/*
|
||||
* drop reorg trigger: We have already dropped the trigger in normal
|
||||
* drop repack trigger: We have already dropped the trigger in normal
|
||||
* cases, but it can be left on error.
|
||||
*/
|
||||
execute_with_format(
|
||||
SPI_OK_UTILITY,
|
||||
"DROP TRIGGER IF EXISTS z_reorg_trigger ON %s.%s CASCADE",
|
||||
"DROP TRIGGER IF EXISTS z_repack_trigger ON %s.%s CASCADE",
|
||||
nspname, relname);
|
||||
|
||||
#if PG_VERSION_NUM < 80400
|
||||
@ -810,7 +810,7 @@ reorg_drop(PG_FUNCTION_ARGS)
|
||||
"DELETE FROM pg_catalog.pg_autovacuum v"
|
||||
" USING pg_class c, pg_namespace n"
|
||||
" WHERE relname IN ('log_%u', 'table_%u')"
|
||||
" AND n.nspname = 'reorg'"
|
||||
" AND n.nspname = 'repack'"
|
||||
" AND c.relnamespace = n.oid"
|
||||
" AND v.vacrelid = c.oid",
|
||||
oid, oid);
|
||||
@ -819,19 +819,19 @@ reorg_drop(PG_FUNCTION_ARGS)
|
||||
/* drop log table */
|
||||
execute_with_format(
|
||||
SPI_OK_UTILITY,
|
||||
"DROP TABLE IF EXISTS reorg.log_%u CASCADE",
|
||||
"DROP TABLE IF EXISTS repack.log_%u CASCADE",
|
||||
oid);
|
||||
|
||||
/* drop temp table */
|
||||
execute_with_format(
|
||||
SPI_OK_UTILITY,
|
||||
"DROP TABLE IF EXISTS reorg.table_%u CASCADE",
|
||||
"DROP TABLE IF EXISTS repack.table_%u CASCADE",
|
||||
oid);
|
||||
|
||||
/* drop type for log table */
|
||||
execute_with_format(
|
||||
SPI_OK_UTILITY,
|
||||
"DROP TYPE IF EXISTS reorg.pk_%u CASCADE",
|
||||
"DROP TYPE IF EXISTS repack.pk_%u CASCADE",
|
||||
oid);
|
||||
|
||||
SPI_finish();
|
||||
@ -840,12 +840,12 @@ reorg_drop(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
Datum
|
||||
reorg_disable_autovacuum(PG_FUNCTION_ARGS)
|
||||
repack_disable_autovacuum(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid oid = PG_GETARG_OID(0);
|
||||
|
||||
/* connect to SPI manager */
|
||||
reorg_init();
|
||||
repack_init();
|
||||
|
||||
#if PG_VERSION_NUM >= 80400
|
||||
execute_with_format(
|
||||
@ -866,20 +866,20 @@ reorg_disable_autovacuum(PG_FUNCTION_ARGS)
|
||||
|
||||
/* init SPI */
|
||||
static void
|
||||
reorg_init(void)
|
||||
repack_init(void)
|
||||
{
|
||||
int ret = SPI_connect();
|
||||
if (ret != SPI_OK_CONNECT)
|
||||
elog(ERROR, "pg_reorg: SPI_connect returned %d", ret);
|
||||
elog(ERROR, "pg_repack: SPI_connect returned %d", ret);
|
||||
}
|
||||
|
||||
/* prepare plan */
|
||||
static SPIPlanPtr
|
||||
reorg_prepare(const char *src, int nargs, Oid *argtypes)
|
||||
repack_prepare(const char *src, int nargs, Oid *argtypes)
|
||||
{
|
||||
SPIPlanPtr plan = SPI_prepare(src, nargs, argtypes);
|
||||
if (plan == NULL)
|
||||
elog(ERROR, "pg_reorg: reorg_prepare failed (code=%d, query=%s)", SPI_result, src);
|
||||
elog(ERROR, "pg_repack: repack_prepare failed (code=%d, query=%s)", SPI_result, src);
|
||||
return plan;
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
/*
|
||||
* pg_reorg: lib/uninstall_reorg.sql
|
||||
* pg_repack: lib/uninstall_repack.sql
|
||||
*
|
||||
* Portions Copyright (c) 2008-2011, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||
* Portions Copyright (c) 2011, Itagaki Takahiro
|
||||
*/
|
||||
|
||||
DROP SCHEMA IF EXISTS reorg CASCADE;
|
||||
DROP SCHEMA IF EXISTS repack CASCADE;
|
Reference in New Issue
Block a user