Skip to content

Commit b8659fa

Browse files
committed
rename "partition" arguments to "partition_relid"
1 parent 411a111 commit b8659fa

File tree

3 files changed

+141
-78
lines changed

3 files changed

+141
-78
lines changed

init.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -643,21 +643,21 @@ SET pg_pathman.enable_partitionfilter = off; /* ensures that PartitionFilter is
643643
*/
644644
CREATE OR REPLACE FUNCTION @extschema@.copy_foreign_keys(
645645
parent_relid REGCLASS,
646-
partition REGCLASS)
646+
partition_relid REGCLASS)
647647
RETURNS VOID AS
648648
$$
649649
DECLARE
650650
rec RECORD;
651651

652652
BEGIN
653653
PERFORM @extschema@.validate_relname(parent_relid);
654-
PERFORM @extschema@.validate_relname(partition);
654+
PERFORM @extschema@.validate_relname(partition_relid);
655655

656656
FOR rec IN (SELECT oid as conid FROM pg_catalog.pg_constraint
657657
WHERE conrelid = parent_relid AND contype = 'f')
658658
LOOP
659659
EXECUTE format('ALTER TABLE %s ADD %s',
660-
partition::TEXT,
660+
partition_relid::TEXT,
661661
pg_catalog.pg_get_constraintdef(rec.conid));
662662
END LOOP;
663663
END
@@ -880,7 +880,7 @@ LANGUAGE C STRICT;
880880
*/
881881
CREATE OR REPLACE FUNCTION @extschema@.invoke_on_partition_created_callback(
882882
parent_relid REGCLASS,
883-
partition REGCLASS,
883+
partition_relid REGCLASS,
884884
init_callback REGPROCEDURE,
885885
start_value ANYELEMENT,
886886
end_value ANYELEMENT)
@@ -892,7 +892,7 @@ LANGUAGE C;
892892
*/
893893
CREATE OR REPLACE FUNCTION @extschema@.invoke_on_partition_created_callback(
894894
parent_relid REGCLASS,
895-
partition REGCLASS,
895+
partition_relid REGCLASS,
896896
init_callback REGPROCEDURE)
897897
RETURNS VOID AS 'pg_pathman', 'invoke_on_partition_created_callback'
898898
LANGUAGE C;

pg_pathman--1.2--1.3.sql

Lines changed: 98 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,13 @@ DROP FUNCTION @extschema@.get_attribute_type(REGCLASS, TEXT);
6363
DROP FUNCTION @extschema@.create_hash_partitions(REGCLASS, TEXT, INTEGER, BOOLEAN);
6464
DROP FUNCTION @extschema@.create_hash_partitions_internal(REGCLASS, TEXT, INTEGER);
6565
DROP FUNCTION @extschema@.build_range_condition(TEXT, ANYELEMENT, ANYELEMENT);
66-
DROP FUNCTION @extschema@.get_part_range(REGCLASS, ANYELEMENT);
66+
DROP FUNCTION @extschema@.copy_foreign_keys(REGCLASS, REGCLASS);
67+
DROP FUNCTION @extschema@.invoke_on_partition_created_callback(REGCLASS, REGCLASS, REGPROCEDURE, ANYELEMENT, ANYELEMENT);
68+
DROP FUNCTION @extschema@.invoke_on_partition_created_callback(REGCLASS, REGCLASS, REGPROCEDURE);
69+
DROP FUNCTION @extschema@.split_range_partition(REGCLASS, ANYELEMENT, TEXT, TEXT, OUT ANYARRAY);
70+
DROP FUNCTION @extschema@.drop_range_partition(REGCLASS, BOOLEAN);
71+
DROP FUNCTION @extschema@.attach_range_partition(REGCLASS, REGCLASS, ANYELEMENT, ANYELEMENT);
72+
DROP FUNCTION @extschema@.detach_range_partition(REGCLASS);
6773

6874
/* ------------------------------------------------------------------------
6975
* Alter functions' modifiers
@@ -441,7 +447,7 @@ LANGUAGE C;
441447

442448

443449
CREATE OR REPLACE FUNCTION @extschema@.split_range_partition(
444-
partition REGCLASS,
450+
partition_relid REGCLASS,
445451
split_value ANYELEMENT,
446452
partition_name TEXT DEFAULT NULL,
447453
tablespace TEXT DEFAULT NULL,
@@ -458,13 +464,13 @@ DECLARE
458464
v_check_name TEXT;
459465

460466
BEGIN
461-
v_parent = @extschema@.get_parent_of_partition(partition);
467+
v_parent = @extschema@.get_parent_of_partition(partition_relid);
462468

463469
/* Acquire lock on parent */
464470
PERFORM @extschema@.lock_partitioned_relation(v_parent);
465471

466472
/* Acquire data modification lock (prevent further modifications) */
467-
PERFORM @extschema@.prevent_relation_modification(partition);
473+
PERFORM @extschema@.prevent_relation_modification(partition_relid);
468474

469475
v_atttype = @extschema@.get_partition_key_type(v_parent);
470476

@@ -475,13 +481,13 @@ BEGIN
475481

476482
/* Check if this is a RANGE partition */
477483
IF v_part_type != 2 THEN
478-
RAISE EXCEPTION '"%" is not a RANGE partition', partition::TEXT;
484+
RAISE EXCEPTION '"%" is not a RANGE partition', partition_relid::TEXT;
479485
END IF;
480486

481487
/* Get partition values range */
482488
EXECUTE format('SELECT @extschema@.get_part_range($1, NULL::%s)',
483489
@extschema@.get_base_type(v_atttype)::TEXT)
484-
USING partition
490+
USING partition_relid
485491
INTO p_range;
486492

487493
IF p_range IS NULL THEN
@@ -507,21 +513,21 @@ BEGIN
507513
v_attname, split_value, p_range[2]);
508514
EXECUTE format('WITH part_data AS (DELETE FROM %s WHERE %s RETURNING *)
509515
INSERT INTO %s SELECT * FROM part_data',
510-
partition::TEXT,
516+
partition_relid::TEXT,
511517
v_cond,
512518
v_new_partition);
513519

514520
/* Alter original partition */
515-
v_cond := @extschema@.build_range_condition(partition::regclass,
521+
v_cond := @extschema@.build_range_condition(partition_relid::regclass,
516522
v_attname, p_range[1], split_value);
517-
v_check_name := @extschema@.build_check_constraint_name(partition, v_attname);
523+
v_check_name := @extschema@.build_check_constraint_name(partition_relid, v_attname);
518524

519525
EXECUTE format('ALTER TABLE %s DROP CONSTRAINT %s',
520-
partition::TEXT,
526+
partition_relid::TEXT,
521527
v_check_name);
522528

523529
EXECUTE format('ALTER TABLE %s ADD CONSTRAINT %s CHECK (%s)',
524-
partition::TEXT,
530+
partition_relid::TEXT,
525531
v_check_name,
526532
v_cond);
527533

@@ -747,7 +753,7 @@ LANGUAGE plpgsql;
747753

748754
CREATE OR REPLACE FUNCTION @extschema@.attach_range_partition(
749755
parent_relid REGCLASS,
750-
partition REGCLASS,
756+
partition_relid REGCLASS,
751757
start_value ANYELEMENT,
752758
end_value ANYELEMENT)
753759
RETURNS TEXT AS
@@ -759,29 +765,29 @@ DECLARE
759765

760766
BEGIN
761767
PERFORM @extschema@.validate_relname(parent_relid);
762-
PERFORM @extschema@.validate_relname(partition);
768+
PERFORM @extschema@.validate_relname(partition_relid);
763769

764770
/* Acquire lock on parent */
765771
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
766772

767773
/* Ignore temporary tables */
768774
SELECT relpersistence FROM pg_catalog.pg_class
769-
WHERE oid = partition INTO rel_persistence;
775+
WHERE oid = partition_relid INTO rel_persistence;
770776

771777
IF rel_persistence = 't'::CHAR THEN
772778
RAISE EXCEPTION 'temporary table "%" cannot be used as a partition',
773-
partition::TEXT;
779+
partition_relid::TEXT;
774780
END IF;
775781

776782
/* check range overlap */
777783
PERFORM @extschema@.check_range_available(parent_relid, start_value, end_value);
778784

779-
IF NOT @extschema@.validate_relations_equality(parent_relid, partition) THEN
785+
IF NOT @extschema@.validate_relations_equality(parent_relid, partition_relid) THEN
780786
RAISE EXCEPTION 'partition must have the exact same structure as parent';
781787
END IF;
782788

783789
/* Set inheritance */
784-
EXECUTE format('ALTER TABLE %s INHERIT %s', partition, parent_relid);
790+
EXECUTE format('ALTER TABLE %s INHERIT %s', partition_relid, parent_relid);
785791

786792
v_attname := attname FROM @extschema@.pathman_config WHERE partrel = parent_relid;
787793

@@ -791,9 +797,9 @@ BEGIN
791797

792798
/* Set check constraint */
793799
EXECUTE format('ALTER TABLE %s ADD CONSTRAINT %s CHECK (%s)',
794-
partition::TEXT,
795-
@extschema@.build_check_constraint_name(partition, v_attname),
796-
@extschema@.build_range_condition(partition,
800+
partition_relid::TEXT,
801+
@extschema@.build_check_constraint_name(partition_relid, v_attname),
802+
@extschema@.build_range_condition(partition_relid,
797803
v_attname,
798804
start_value,
799805
end_value));
@@ -807,30 +813,30 @@ BEGIN
807813
INTO v_init_callback;
808814

809815
PERFORM @extschema@.invoke_on_partition_created_callback(parent_relid,
810-
partition,
816+
partition_relid,
811817
v_init_callback,
812818
start_value,
813819
end_value);
814820

815821
/* Invalidate cache */
816822
PERFORM @extschema@.on_update_partitions(parent_relid);
817823

818-
RETURN partition;
824+
RETURN partition_relid;
819825
END
820826
$$
821827
LANGUAGE plpgsql;
822828

823829

824830
CREATE OR REPLACE FUNCTION @extschema@.detach_range_partition(
825-
partition REGCLASS)
831+
partition_relid REGCLASS)
826832
RETURNS TEXT AS
827833
$$
828834
DECLARE
829835
v_attname TEXT;
830836
parent_relid REGCLASS;
831837

832838
BEGIN
833-
parent_relid := @extschema@.get_parent_of_partition(partition);
839+
parent_relid := @extschema@.get_parent_of_partition(partition_relid);
834840

835841
/* Acquire lock on parent */
836842
PERFORM @extschema@.prevent_relation_modification(parent_relid);
@@ -845,23 +851,87 @@ BEGIN
845851

846852
/* Remove inheritance */
847853
EXECUTE format('ALTER TABLE %s NO INHERIT %s',
848-
partition::TEXT,
854+
partition_relid::TEXT,
849855
parent_relid::TEXT);
850856

851857
/* Remove check constraint */
852858
EXECUTE format('ALTER TABLE %s DROP CONSTRAINT %s',
853-
partition::TEXT,
854-
@extschema@.build_check_constraint_name(partition, v_attname));
859+
partition_relid::TEXT,
860+
@extschema@.build_check_constraint_name(partition_relid, v_attname));
855861

856862
/* Invalidate cache */
857863
PERFORM @extschema@.on_update_partitions(parent_relid);
858864

859-
RETURN partition;
865+
RETURN partition_relid;
860866
END
861867
$$
862868
LANGUAGE plpgsql;
863869

864870

871+
CREATE OR REPLACE FUNCTION @extschema@.drop_range_partition(
872+
partition_relid REGCLASS,
873+
delete_data BOOLEAN DEFAULT TRUE)
874+
RETURNS TEXT AS
875+
$$
876+
DECLARE
877+
parent_relid REGCLASS;
878+
part_name TEXT;
879+
v_relkind CHAR;
880+
v_rows BIGINT;
881+
v_part_type INTEGER;
882+
883+
BEGIN
884+
parent_relid := @extschema@.get_parent_of_partition(partition_relid);
885+
part_name := partition_relid::TEXT; /* save the name to be returned */
886+
887+
SELECT parttype
888+
FROM @extschema@.pathman_config
889+
WHERE partrel = parent_relid
890+
INTO v_part_type;
891+
892+
/* Check if this is a RANGE partition */
893+
IF v_part_type != 2 THEN
894+
RAISE EXCEPTION '"%" is not a RANGE partition', partition_relid::TEXT;
895+
END IF;
896+
897+
/* Acquire lock on parent */
898+
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
899+
900+
IF NOT delete_data THEN
901+
EXECUTE format('INSERT INTO %s SELECT * FROM %s',
902+
parent_relid::TEXT,
903+
partition_relid::TEXT);
904+
GET DIAGNOSTICS v_rows = ROW_COUNT;
905+
906+
/* Show number of copied rows */
907+
RAISE NOTICE '% rows copied from %', v_rows, partition_relid::TEXT;
908+
END IF;
909+
910+
SELECT relkind FROM pg_catalog.pg_class
911+
WHERE oid = partition_relid
912+
INTO v_relkind;
913+
914+
/*
915+
* Determine the kind of child relation. It can be either regular
916+
* table (r) or foreign table (f). Depending on relkind we use
917+
* DROP TABLE or DROP FOREIGN TABLE.
918+
*/
919+
IF v_relkind = 'f' THEN
920+
EXECUTE format('DROP FOREIGN TABLE %s', partition_relid::TEXT);
921+
ELSE
922+
EXECUTE format('DROP TABLE %s', partition_relid::TEXT);
923+
END IF;
924+
925+
/* Invalidate cache */
926+
PERFORM @extschema@.on_update_partitions(parent_relid);
927+
928+
RETURN part_name;
929+
END
930+
$$
931+
LANGUAGE plpgsql
932+
SET pg_pathman.enable_partitionfilter = off;
933+
934+
865935
CREATE OR REPLACE FUNCTION @extschema@.drop_range_partition_expand_next(
866936
partition REGCLASS)
867937
RETURNS VOID AS 'pg_pathman', 'drop_range_partition_expand_next'
@@ -875,10 +945,3 @@ CREATE OR REPLACE FUNCTION @extschema@.build_range_condition(
875945
end_value ANYELEMENT)
876946
RETURNS TEXT AS 'pg_pathman', 'build_range_condition'
877947
LANGUAGE C;
878-
879-
880-
CREATE OR REPLACE FUNCTION @extschema@.get_part_range(
881-
partition REGCLASS,
882-
dummy ANYELEMENT)
883-
RETURNS ANYARRAY AS 'pg_pathman', 'get_part_range_by_oid'
884-
LANGUAGE C;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy