mirror of https://github.com/citusdata/citus.git
65 lines
2.7 KiB
PL/PgSQL
65 lines
2.7 KiB
PL/PgSQL
-- citus--8.0-2--8.0-3
|
|
SET search_path = 'pg_catalog';
|
|
|
|
CREATE FUNCTION master_remove_partition_metadata(logicalrelid regclass,
|
|
schema_name text,
|
|
table_name text)
|
|
RETURNS void
|
|
LANGUAGE C STRICT
|
|
AS 'MODULE_PATHNAME', $$master_remove_partition_metadata$$;
|
|
COMMENT ON FUNCTION master_remove_partition_metadata(logicalrelid regclass,
|
|
schema_name text,
|
|
table_name text)
|
|
IS 'deletes the partition metadata of a distributed table';
|
|
|
|
CREATE OR REPLACE FUNCTION master_remove_distributed_table_metadata_from_workers(logicalrelid regclass,
|
|
schema_name text,
|
|
table_name text)
|
|
RETURNS void
|
|
LANGUAGE C STRICT
|
|
AS 'MODULE_PATHNAME', $$master_remove_distributed_table_metadata_from_workers$$;
|
|
COMMENT ON FUNCTION master_remove_distributed_table_metadata_from_workers(logicalrelid regclass,
|
|
schema_name text,
|
|
table_name text)
|
|
IS 'drops the table and removes all the metadata belonging the distributed table in the worker nodes with metadata.';
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION pg_catalog.citus_drop_trigger()
|
|
RETURNS event_trigger
|
|
LANGUAGE plpgsql
|
|
SET search_path = pg_catalog
|
|
AS $cdbdt$
|
|
DECLARE
|
|
v_obj record;
|
|
sequence_names text[] := '{}';
|
|
table_colocation_id integer;
|
|
propagate_drop boolean := false;
|
|
BEGIN
|
|
-- collect set of dropped sequences to drop on workers later
|
|
SELECT array_agg(object_identity) INTO sequence_names
|
|
FROM pg_event_trigger_dropped_objects()
|
|
WHERE object_type = 'sequence';
|
|
|
|
FOR v_obj IN SELECT * FROM pg_event_trigger_dropped_objects()
|
|
WHERE object_type IN ('table', 'foreign table')
|
|
LOOP
|
|
-- first drop the table and metadata on the workers
|
|
-- then drop all the shards on the workers
|
|
-- finally remove the pg_dist_partition entry on the coordinator
|
|
PERFORM master_remove_distributed_table_metadata_from_workers(v_obj.objid, v_obj.schema_name, v_obj.object_name);
|
|
PERFORM master_drop_all_shards(v_obj.objid, v_obj.schema_name, v_obj.object_name);
|
|
PERFORM master_remove_partition_metadata(v_obj.objid, v_obj.schema_name, v_obj.object_name);
|
|
END LOOP;
|
|
|
|
IF cardinality(sequence_names) = 0 THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
PERFORM master_drop_sequences(sequence_names);
|
|
END;
|
|
$cdbdt$;
|
|
COMMENT ON FUNCTION pg_catalog.citus_drop_trigger()
|
|
IS 'perform checks and actions at the end of DROP actions';
|
|
|
|
RESET search_path;
|