mirror of https://github.com/citusdata/citus.git
257 lines
14 KiB
PL/PgSQL
257 lines
14 KiB
PL/PgSQL
-- citus--10.0-4--9.5-1
|
|
|
|
-- This migration file aims to fix the issues with upgrades on clusters without public schema.
|
|
|
|
-- This file is created by the following command, and some more changes in a separate commit
|
|
-- cat citus--10.0-3--10.0-2.sql citus--10.0-2--10.0-1.sql citus--10.0-1--9.5-1.sql > citus--10.0-4--9.5-1.sql
|
|
|
|
-- copy of citus--10.0-4--10.0-3
|
|
--
|
|
-- 10.0-3--10.0-4 was added later as a patch to fix a bug in our PG upgrade functions
|
|
--
|
|
-- The upgrade fixes a bug in citus_(prepare|finish)_pg_upgrade. Given the old versions of
|
|
-- these functions contain a bug it is better to _not_ restore the old version and keep
|
|
-- the patched version of the function.
|
|
--
|
|
-- This is inline with the downgrade scripts for earlier versions of this patch
|
|
--
|
|
|
|
-- copy of citus--10.0-3--10.0-2
|
|
-- this is a downgrade path that will revert the changes made in citus--10.0-2--10.0-3.sql
|
|
|
|
DROP FUNCTION pg_catalog.citus_update_table_statistics(regclass);
|
|
|
|
#include "../udfs/citus_update_table_statistics/10.0-1.sql"
|
|
|
|
CREATE OR REPLACE FUNCTION master_update_table_statistics(relation regclass)
|
|
RETURNS VOID AS $$
|
|
DECLARE
|
|
colocated_tables regclass[];
|
|
BEGIN
|
|
SELECT get_colocated_table_array(relation) INTO colocated_tables;
|
|
|
|
PERFORM
|
|
master_update_shard_statistics(shardid)
|
|
FROM
|
|
pg_dist_shard
|
|
WHERE
|
|
logicalrelid = ANY (colocated_tables);
|
|
END;
|
|
$$ LANGUAGE 'plpgsql';
|
|
COMMENT ON FUNCTION master_update_table_statistics(regclass)
|
|
IS 'updates shard statistics of the given table and its colocated tables';
|
|
|
|
DROP FUNCTION pg_catalog.citus_get_active_worker_nodes(OUT text, OUT bigint);
|
|
-- copy of citus--10.0-2--10.0-1.sql
|
|
#include "../../../columnar/sql/downgrades/columnar--10.0-2--10.0-1.sql"
|
|
|
|
-- copy of citus--10.0-1--9.5-1
|
|
|
|
-- In Citus 10.0, we added another internal udf (notify_constraint_dropped)
|
|
-- to be called by citus_drop_trigger. Since this script is executed when
|
|
-- downgrading Citus, we don't have notify_constraint_dropped in citus.so.
|
|
-- For this reason, we first need to downgrade citus_drop_trigger so it doesn't
|
|
-- call notify_constraint_dropped.
|
|
-- To downgrade citus_drop_trigger, we first need to have the old version of
|
|
-- citus_drop_all_shards as we renamed it in Citus 10.0.
|
|
ALTER FUNCTION pg_catalog.citus_drop_all_shards(regclass, text, text)
|
|
RENAME TO master_drop_all_shards;
|
|
#include "../udfs/citus_drop_trigger/9.5-1.sql"
|
|
|
|
-- Now we can safely drop notify_constraint_dropped as we downgraded citus_drop_trigger.
|
|
DROP FUNCTION pg_catalog.notify_constraint_dropped();
|
|
|
|
#include "../udfs/citus_finish_pg_upgrade/9.5-1.sql"
|
|
|
|
#include "../../../columnar/sql/downgrades/columnar--10.0-1--9.5-1.sql"
|
|
|
|
DROP VIEW IF EXISTS pg_catalog.citus_tables;
|
|
DROP VIEW IF EXISTS public.citus_tables;
|
|
DROP FUNCTION pg_catalog.alter_distributed_table(regclass, text, int, text, boolean);
|
|
DROP FUNCTION pg_catalog.alter_table_set_access_method(regclass, text);
|
|
DROP FUNCTION pg_catalog.citus_total_relation_size(regclass,boolean);
|
|
DROP FUNCTION pg_catalog.undistribute_table(regclass,boolean);
|
|
DROP FUNCTION pg_catalog.citus_add_local_table_to_metadata(regclass,boolean);
|
|
DROP FUNCTION pg_catalog.citus_add_node(text, integer, integer, noderole, name);
|
|
DROP FUNCTION pg_catalog.citus_activate_node(text, integer);
|
|
DROP FUNCTION pg_catalog.citus_add_inactive_node(text, integer, integer, noderole, name);
|
|
DROP FUNCTION pg_catalog.citus_add_secondary_node(text, integer, text, integer, name);
|
|
DROP FUNCTION pg_catalog.citus_disable_node(text, integer);
|
|
DROP FUNCTION pg_catalog.citus_drain_node(text, integer, citus.shard_transfer_mode, name);
|
|
DROP FUNCTION pg_catalog.citus_remove_node(text, integer);
|
|
DROP FUNCTION pg_catalog.citus_set_node_property(text, integer, text, boolean);
|
|
DROP FUNCTION pg_catalog.citus_unmark_object_distributed(oid, oid, int);
|
|
DROP FUNCTION pg_catalog.citus_update_node(int, text, int, bool, int);
|
|
DROP FUNCTION pg_catalog.citus_update_shard_statistics(bigint);
|
|
DROP FUNCTION pg_catalog.citus_update_table_statistics(regclass);
|
|
DROP FUNCTION pg_catalog.citus_copy_shard_placement(bigint, text, integer, text, integer, bool, citus.shard_transfer_mode);
|
|
DROP FUNCTION pg_catalog.citus_move_shard_placement(bigint, text, integer, text, integer, citus.shard_transfer_mode);
|
|
|
|
ALTER FUNCTION pg_catalog.citus_conninfo_cache_invalidate()
|
|
RENAME TO master_conninfo_cache_invalidate;
|
|
ALTER FUNCTION pg_catalog.citus_dist_local_group_cache_invalidate()
|
|
RENAME TO master_dist_local_group_cache_invalidate;
|
|
ALTER FUNCTION pg_catalog.citus_dist_node_cache_invalidate()
|
|
RENAME TO master_dist_node_cache_invalidate;
|
|
ALTER FUNCTION pg_catalog.citus_dist_object_cache_invalidate()
|
|
RENAME TO master_dist_object_cache_invalidate;
|
|
ALTER FUNCTION pg_catalog.citus_dist_partition_cache_invalidate()
|
|
RENAME TO master_dist_partition_cache_invalidate;
|
|
ALTER FUNCTION pg_catalog.citus_dist_placement_cache_invalidate()
|
|
RENAME TO master_dist_placement_cache_invalidate;
|
|
ALTER FUNCTION pg_catalog.citus_dist_shard_cache_invalidate()
|
|
RENAME TO master_dist_shard_cache_invalidate;
|
|
|
|
#include "../udfs/citus_conninfo_cache_invalidate/9.5-1.sql"
|
|
#include "../udfs/citus_dist_local_group_cache_invalidate/9.5-1.sql"
|
|
#include "../udfs/citus_dist_node_cache_invalidate/9.5-1.sql"
|
|
#include "../udfs/citus_dist_object_cache_invalidate/9.5-1.sql"
|
|
#include "../udfs/citus_dist_partition_cache_invalidate/9.5-1.sql"
|
|
#include "../udfs/citus_dist_placement_cache_invalidate/9.5-1.sql"
|
|
#include "../udfs/citus_dist_shard_cache_invalidate/9.5-1.sql"
|
|
|
|
DROP VIEW pg_catalog.time_partitions;
|
|
DROP FUNCTION pg_catalog.time_partition_range(regclass);
|
|
DROP PROCEDURE pg_catalog.alter_old_partitions_set_access_method(regclass,timestamptz,name);
|
|
|
|
DROP FUNCTION pg_catalog.citus_set_coordinator_host(text,int,noderole,name);
|
|
DROP FUNCTION pg_catalog.worker_change_sequence_dependency(regclass, regclass, regclass);
|
|
|
|
CREATE FUNCTION pg_catalog.mark_tables_colocated(source_table_name regclass, target_table_names regclass[])
|
|
RETURNS void
|
|
LANGUAGE C STRICT
|
|
AS 'MODULE_PATHNAME', $$mark_tables_colocated$$;
|
|
COMMENT ON FUNCTION pg_catalog.mark_tables_colocated(source_table_name regclass, target_table_names regclass[])
|
|
IS 'mark target distributed tables as colocated with the source table';
|
|
|
|
CREATE FUNCTION pg_catalog.master_modify_multiple_shards(text)
|
|
RETURNS integer
|
|
LANGUAGE C STRICT
|
|
AS 'MODULE_PATHNAME', $$master_modify_multiple_shards$$;
|
|
COMMENT ON FUNCTION master_modify_multiple_shards(text)
|
|
IS 'push delete and update queries to shards';
|
|
|
|
CREATE FUNCTION pg_catalog.master_create_distributed_table(table_name regclass,
|
|
distribution_column text,
|
|
distribution_method citus.distribution_type)
|
|
RETURNS void
|
|
LANGUAGE C STRICT
|
|
AS 'MODULE_PATHNAME', $$master_create_distributed_table$$;
|
|
COMMENT ON FUNCTION pg_catalog.master_create_distributed_table(table_name regclass,
|
|
distribution_column text,
|
|
distribution_method citus.distribution_type)
|
|
IS 'define the table distribution functions';
|
|
|
|
CREATE FUNCTION pg_catalog.master_create_worker_shards(table_name text, shard_count integer,
|
|
replication_factor integer DEFAULT 2)
|
|
RETURNS void
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C STRICT;
|
|
|
|
DROP FUNCTION pg_catalog.remove_local_tables_from_metadata();
|
|
|
|
#include "../udfs/citus_total_relation_size/7.0-1.sql"
|
|
#include "../udfs/upgrade_to_reference_table/8.0-1.sql"
|
|
#include "../udfs/undistribute_table/9.5-1.sql"
|
|
#include "../udfs/create_citus_local_table/9.5-1.sql"
|
|
DROP VIEW pg_catalog.citus_shards CASCADE;
|
|
DROP FUNCTION pg_catalog.citus_shard_sizes(OUT table_name text, OUT size bigint);
|
|
|
|
DROP FUNCTION pg_catalog.fix_pre_citus10_partitioned_table_constraint_names();
|
|
DROP FUNCTION pg_catalog.fix_pre_citus10_partitioned_table_constraint_names(regclass);
|
|
DROP FUNCTION pg_catalog.worker_fix_pre_citus10_partitioned_table_constraint_names(regclass,bigint,text);
|
|
DROP FUNCTION pg_catalog.citus_dist_stat_activity CASCADE;
|
|
DROP FUNCTION pg_catalog.citus_worker_stat_activity CASCADE;
|
|
|
|
CREATE OR REPLACE FUNCTION pg_catalog.citus_dist_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
|
RETURNS SETOF RECORD
|
|
LANGUAGE C STRICT AS 'MODULE_PATHNAME',
|
|
$$citus_dist_stat_activity$$;
|
|
|
|
COMMENT ON FUNCTION pg_catalog.citus_dist_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
|
IS 'returns distributed transaction activity on distributed tables';
|
|
|
|
CREATE VIEW citus.citus_dist_stat_activity AS
|
|
SELECT * FROM pg_catalog.citus_dist_stat_activity();
|
|
ALTER VIEW citus.citus_dist_stat_activity SET SCHEMA pg_catalog;
|
|
GRANT SELECT ON pg_catalog.citus_dist_stat_activity TO PUBLIC;
|
|
|
|
SET search_path = 'pg_catalog';
|
|
|
|
CREATE VIEW citus.citus_lock_waits AS
|
|
|
|
WITH
|
|
citus_dist_stat_activity AS
|
|
(
|
|
SELECT * FROM citus_dist_stat_activity
|
|
),
|
|
unique_global_wait_edges AS
|
|
(
|
|
SELECT DISTINCT ON(waiting_node_id, waiting_transaction_num, blocking_node_id, blocking_transaction_num) * FROM dump_global_wait_edges()
|
|
),
|
|
citus_dist_stat_activity_with_node_id AS
|
|
(
|
|
SELECT
|
|
citus_dist_stat_activity.*, (CASE citus_dist_stat_activity.master_query_host_name WHEN 'coordinator_host' THEN 0 ELSE pg_dist_node.nodeid END) as initiator_node_id
|
|
FROM
|
|
citus_dist_stat_activity LEFT JOIN pg_dist_node
|
|
ON
|
|
citus_dist_stat_activity.master_query_host_name = pg_dist_node.nodename AND
|
|
citus_dist_stat_activity.master_query_host_port = pg_dist_node.nodeport
|
|
)
|
|
SELECT
|
|
waiting.pid AS waiting_pid,
|
|
blocking.pid AS blocking_pid,
|
|
waiting.query AS blocked_statement,
|
|
blocking.query AS current_statement_in_blocking_process,
|
|
waiting.initiator_node_id AS waiting_node_id,
|
|
blocking.initiator_node_id AS blocking_node_id,
|
|
waiting.master_query_host_name AS waiting_node_name,
|
|
blocking.master_query_host_name AS blocking_node_name,
|
|
waiting.master_query_host_port AS waiting_node_port,
|
|
blocking.master_query_host_port AS blocking_node_port
|
|
FROM
|
|
unique_global_wait_edges
|
|
JOIN
|
|
citus_dist_stat_activity_with_node_id waiting ON (unique_global_wait_edges.waiting_transaction_num = waiting.transaction_number AND unique_global_wait_edges.waiting_node_id = waiting.initiator_node_id)
|
|
JOIN
|
|
citus_dist_stat_activity_with_node_id blocking ON (unique_global_wait_edges.blocking_transaction_num = blocking.transaction_number AND unique_global_wait_edges.blocking_node_id = blocking.initiator_node_id);
|
|
|
|
ALTER VIEW citus.citus_lock_waits SET SCHEMA pg_catalog;
|
|
GRANT SELECT ON pg_catalog.citus_lock_waits TO PUBLIC;
|
|
|
|
CREATE OR REPLACE FUNCTION citus_worker_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
|
RETURNS SETOF RECORD
|
|
LANGUAGE C STRICT AS 'MODULE_PATHNAME',
|
|
$$citus_worker_stat_activity$$;
|
|
|
|
COMMENT ON FUNCTION citus_worker_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
|
IS 'returns distributed transaction activity on shards of distributed tables';
|
|
|
|
CREATE VIEW citus.citus_worker_stat_activity AS
|
|
SELECT * FROM pg_catalog.citus_worker_stat_activity();
|
|
ALTER VIEW citus.citus_worker_stat_activity SET SCHEMA pg_catalog;
|
|
GRANT SELECT ON pg_catalog.citus_worker_stat_activity TO PUBLIC;
|
|
|
|
RESET search_path;
|