Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit04b1b20

Browse files
committed
changes to plpgsql funcs for enterprise edition
1 parent063c111 commit04b1b20

File tree

4 files changed

+87
-48
lines changed

4 files changed

+87
-48
lines changed

‎init.sql

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,12 @@ LANGUAGE plpgsql STRICT;
182182
*/
183183
CREATEOR REPLACE FUNCTION @extschema@.show_partition_list()
184184
RETURNS TABLE (
185-
parentREGCLASS,
186-
partitionREGCLASS,
187-
parttypeINT4,
188-
partattrTEXT,
189-
range_minTEXT,
190-
range_maxTEXT)
185+
parentREGCLASS,
186+
"partition"REGCLASS,
187+
parttypeINT4,
188+
partattrTEXT,
189+
range_minTEXT,
190+
range_maxTEXT)
191191
AS'pg_pathman','show_partition_list_internal'
192192
LANGUAGE C STRICT;
193193

@@ -580,27 +580,38 @@ SET pg_pathman.enable_partitionfilter = off; /* ensures that PartitionFilter is
580580
*/
581581
CREATEOR REPLACE FUNCTION @extschema@.copy_foreign_keys(
582582
parent_relidREGCLASS,
583-
partitionREGCLASS)
583+
partition_relidREGCLASS)
584584
RETURNS VOIDAS
585585
$$
586586
DECLARE
587587
recRECORD;
588588

589589
BEGIN
590590
PERFORM @extschema@.validate_relname(parent_relid);
591-
PERFORM @extschema@.validate_relname(partition);
591+
PERFORM @extschema@.validate_relname(partition_relid);
592592

593593
FOR recIN (SELECToidas conidFROMpg_catalog.pg_constraint
594594
WHERE conrelid= parent_relidAND contype='f')
595595
LOOP
596596
EXECUTE format('ALTER TABLE %s ADD %s',
597-
partition::TEXT,
597+
partition_relid::TEXT,
598598
pg_catalog.pg_get_constraintdef(rec.conid));
599599
END LOOP;
600600
END
601601
$$ LANGUAGE plpgsql STRICT;
602602

603603

604+
/*
605+
* Partitioning key
606+
*/
607+
CREATEOR REPLACE FUNCTION @extschema@.get_partition_key(relid REGCLASS)
608+
RETURNSTEXTAS
609+
$$
610+
SELECT attnameFROM pathman_configWHERE partrel= relid;
611+
$$
612+
LANGUAGE sql STRICT;
613+
614+
604615
/*
605616
* Create DDL trigger to call pathman_ddl_trigger_func().
606617
*/
@@ -659,6 +670,14 @@ CREATE OR REPLACE FUNCTION @extschema@.get_attribute_type(
659670
RETURNS REGTYPEAS'pg_pathman','get_attribute_type_pl'
660671
LANGUAGE C STRICT;
661672

673+
/*
674+
* Return partition key type
675+
*/
676+
CREATEOR REPLACE FUNCTION @extschema@.get_partition_key_type(
677+
relidREGCLASS)
678+
RETURNS REGTYPEAS'pg_pathman','get_partition_key_type'
679+
LANGUAGE C STRICT;
680+
662681
/*
663682
* Return tablespace name for specified relation.
664683
*/
@@ -769,7 +788,7 @@ LANGUAGE C STRICT;
769788
*/
770789
CREATEOR REPLACE FUNCTION @extschema@.invoke_on_partition_created_callback(
771790
parent_relidREGCLASS,
772-
partitionREGCLASS,
791+
"partition"REGCLASS,
773792
init_callbackREGPROCEDURE,
774793
start_valueANYELEMENT,
775794
end_valueANYELEMENT)
@@ -781,7 +800,7 @@ LANGUAGE C;
781800
*/
782801
CREATEOR REPLACE FUNCTION @extschema@.invoke_on_partition_created_callback(
783802
parent_relidREGCLASS,
784-
partitionREGCLASS,
803+
"partition"REGCLASS,
785804
init_callbackREGPROCEDURE)
786805
RETURNS VOIDAS'pg_pathman','invoke_on_partition_created_callback'
787806
LANGUAGE C;

‎range.sql

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ $$ LANGUAGE plpgsql;
439439
* Split RANGE partition
440440
*/
441441
CREATEOR REPLACE FUNCTION @extschema@.split_range_partition(
442-
partitionREGCLASS,
442+
partition_relidREGCLASS,
443443
split_valueANYELEMENT,
444444
partition_nameTEXT DEFAULTNULL,
445445
tablespaceTEXT DEFAULTNULL,
@@ -456,13 +456,13 @@ DECLARE
456456
v_check_nameTEXT;
457457

458458
BEGIN
459-
v_parent= @extschema@.get_parent_of_partition(partition);
459+
v_parent= @extschema@.get_parent_of_partition(partition_relid);
460460

461461
/* Acquire lock on parent*/
462462
PERFORM @extschema@.lock_partitioned_relation(v_parent);
463463

464464
/* Acquire data modification lock (prevent further modifications)*/
465-
PERFORM @extschema@.prevent_relation_modification(partition);
465+
PERFORM @extschema@.prevent_relation_modification(partition_relid);
466466

467467
SELECT attname, parttype
468468
FROM @extschema@.pathman_config
@@ -475,15 +475,15 @@ BEGIN
475475

476476
/* Check if this is a RANGE partition*/
477477
IF v_part_type!=2 THEN
478-
RAISE EXCEPTION'"%" is not a RANGE partition',partition::TEXT;
478+
RAISE EXCEPTION'"%" is not a RANGE partition',partition_relid::TEXT;
479479
END IF;
480480

481481
v_atttype= @extschema@.get_attribute_type(v_parent, v_attname);
482482

483483
/* Get partition values range*/
484484
EXECUTE format('SELECT @extschema@.get_part_range($1, NULL::%s)',
485485
@extschema@.get_base_type(v_atttype)::TEXT)
486-
USINGpartition
486+
USINGpartition_relid
487487
INTO p_range;
488488

489489
IF p_range ISNULL THEN
@@ -509,21 +509,21 @@ BEGIN
509509
v_attname, split_value, p_range[2]);
510510
EXECUTE format('WITH part_data AS (DELETE FROM %s WHERE %s RETURNING *)
511511
INSERT INTO %s SELECT * FROM part_data',
512-
partition::TEXT,
512+
partition_relid::TEXT,
513513
v_cond,
514514
v_new_partition);
515515

516516
/* Alter original partition*/
517-
v_cond := @extschema@.build_range_condition(partition::regclass,
517+
v_cond := @extschema@.build_range_condition(partition_relid::regclass,
518518
v_attname, p_range[1], split_value);
519-
v_check_name := @extschema@.build_check_constraint_name(partition, v_attname);
519+
v_check_name := @extschema@.build_check_constraint_name(partition_relid, v_attname);
520520

521521
EXECUTE format('ALTER TABLE %s DROP CONSTRAINT %s',
522-
partition::TEXT,
522+
partition_relid::TEXT,
523523
v_check_name);
524524

525525
EXECUTE format('ALTER TABLE %s ADD CONSTRAINT %s CHECK (%s)',
526-
partition::TEXT,
526+
partition_relid::TEXT,
527527
v_check_name,
528528
v_cond);
529529

@@ -958,7 +958,7 @@ LANGUAGE plpgsql;
958958
* Drop range partition
959959
*/
960960
CREATEOR REPLACE FUNCTION @extschema@.drop_range_partition(
961-
partitionREGCLASS,
961+
partition_relidREGCLASS,
962962
delete_dataBOOLEAN DEFAULT TRUE)
963963
RETURNSTEXTAS
964964
$$
@@ -970,8 +970,8 @@ DECLARE
970970
v_part_typeINTEGER;
971971

972972
BEGIN
973-
parent_relid := @extschema@.get_parent_of_partition(partition);
974-
part_name :=partition::TEXT;/* save the name to be returned*/
973+
parent_relid := @extschema@.get_parent_of_partition(partition_relid);
974+
part_name :=partition_relid::TEXT;/* save the name to be returned*/
975975

976976
SELECT parttype
977977
FROM @extschema@.pathman_config
@@ -980,7 +980,7 @@ BEGIN
980980

981981
/* Check if this is a RANGE partition*/
982982
IF v_part_type!=2 THEN
983-
RAISE EXCEPTION'"%" is not a RANGE partition',partition::TEXT;
983+
RAISE EXCEPTION'"%" is not a RANGE partition',partition_relid::TEXT;
984984
END IF;
985985

986986
/* Acquire lock on parent*/
@@ -989,15 +989,15 @@ BEGIN
989989
IF NOT delete_data THEN
990990
EXECUTE format('INSERT INTO %s SELECT * FROM %s',
991991
parent_relid::TEXT,
992-
partition::TEXT);
992+
partition_relid::TEXT);
993993
GET DIAGNOSTICS v_rows= ROW_COUNT;
994994

995995
/* Show number of copied rows*/
996-
RAISE NOTICE'% rows copied from %', v_rows,partition::TEXT;
996+
RAISE NOTICE'% rows copied from %', v_rows,partition_relid::TEXT;
997997
END IF;
998998

999999
SELECT relkindFROMpg_catalog.pg_class
1000-
WHEREoid=partition
1000+
WHEREoid=partition_relid
10011001
INTO v_relkind;
10021002

10031003
/*
@@ -1006,9 +1006,9 @@ BEGIN
10061006
* DROP TABLE or DROP FOREIGN TABLE.
10071007
*/
10081008
IF v_relkind='f' THEN
1009-
EXECUTE format('DROP FOREIGN TABLE %s',partition::TEXT);
1009+
EXECUTE format('DROP FOREIGN TABLE %s',partition_relid::TEXT);
10101010
ELSE
1011-
EXECUTE format('DROP TABLE %s',partition::TEXT);
1011+
EXECUTE format('DROP TABLE %s',partition_relid::TEXT);
10121012
END IF;
10131013

10141014
/* Invalidate cache*/
@@ -1026,7 +1026,7 @@ SET pg_pathman.enable_partitionfilter = off; /* ensures that PartitionFilter is
10261026
*/
10271027
CREATEOR REPLACE FUNCTION @extschema@.attach_range_partition(
10281028
parent_relidREGCLASS,
1029-
partitionREGCLASS,
1029+
partition_relidREGCLASS,
10301030
start_valueANYELEMENT,
10311031
end_valueANYELEMENT)
10321032
RETURNSTEXTAS
@@ -1038,29 +1038,29 @@ DECLARE
10381038

10391039
BEGIN
10401040
PERFORM @extschema@.validate_relname(parent_relid);
1041-
PERFORM @extschema@.validate_relname(partition);
1041+
PERFORM @extschema@.validate_relname(partition_relid);
10421042

10431043
/* Acquire lock on parent*/
10441044
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
10451045

10461046
/* Ignore temporary tables*/
10471047
SELECT relpersistenceFROMpg_catalog.pg_class
1048-
WHEREoid=partition INTO rel_persistence;
1048+
WHEREoid=partition_relid INTO rel_persistence;
10491049

10501050
IF rel_persistence='t'::CHAR THEN
10511051
RAISE EXCEPTION'temporary table "%" cannot be used as a partition',
1052-
partition::TEXT;
1052+
partition_relid::TEXT;
10531053
END IF;
10541054

10551055
/* check range overlap*/
10561056
PERFORM @extschema@.check_range_available(parent_relid, start_value, end_value);
10571057

1058-
IF NOT @extschema@.validate_relations_equality(parent_relid,partition) THEN
1058+
IF NOT @extschema@.validate_relations_equality(parent_relid,partition_relid) THEN
10591059
RAISE EXCEPTION'partition must have the exact same structure as parent';
10601060
END IF;
10611061

10621062
/* Set inheritance*/
1063-
EXECUTE format('ALTER TABLE %s INHERIT %s',partition, parent_relid);
1063+
EXECUTE format('ALTER TABLE %s INHERIT %s',partition_relid, parent_relid);
10641064

10651065
v_attname := attnameFROM @extschema@.pathman_configWHERE partrel= parent_relid;
10661066

@@ -1070,9 +1070,9 @@ BEGIN
10701070

10711071
/* Set check constraint*/
10721072
EXECUTE format('ALTER TABLE %s ADD CONSTRAINT %s CHECK (%s)',
1073-
partition::TEXT,
1074-
@extschema@.build_check_constraint_name(partition, v_attname),
1075-
@extschema@.build_range_condition(partition,
1073+
partition_relid::TEXT,
1074+
@extschema@.build_check_constraint_name(partition_relid, v_attname),
1075+
@extschema@.build_range_condition(partition_relid,
10761076
v_attname,
10771077
start_value,
10781078
end_value));
@@ -1086,15 +1086,15 @@ BEGIN
10861086
INTO v_init_callback;
10871087

10881088
PERFORM @extschema@.invoke_on_partition_created_callback(parent_relid,
1089-
partition,
1089+
partition_relid,
10901090
v_init_callback,
10911091
start_value,
10921092
end_value);
10931093

10941094
/* Invalidate cache*/
10951095
PERFORM @extschema@.on_update_partitions(parent_relid);
10961096

1097-
RETURNpartition;
1097+
RETURNpartition_relid;
10981098
END
10991099
$$
11001100
LANGUAGE plpgsql;
@@ -1104,15 +1104,15 @@ LANGUAGE plpgsql;
11041104
* Detach range partition
11051105
*/
11061106
CREATEOR REPLACE FUNCTION @extschema@.detach_range_partition(
1107-
partitionREGCLASS)
1107+
partition_relidREGCLASS)
11081108
RETURNSTEXTAS
11091109
$$
11101110
DECLARE
11111111
v_attnameTEXT;
11121112
parent_relidREGCLASS;
11131113

11141114
BEGIN
1115-
parent_relid := @extschema@.get_parent_of_partition(partition);
1115+
parent_relid := @extschema@.get_parent_of_partition(partition_relid);
11161116

11171117
/* Acquire lock on parent*/
11181118
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
@@ -1127,18 +1127,18 @@ BEGIN
11271127

11281128
/* Remove inheritance*/
11291129
EXECUTE format('ALTER TABLE %s NO INHERIT %s',
1130-
partition::TEXT,
1130+
partition_relid::TEXT,
11311131
parent_relid::TEXT);
11321132

11331133
/* Remove check constraint*/
11341134
EXECUTE format('ALTER TABLE %s DROP CONSTRAINT %s',
1135-
partition::TEXT,
1136-
@extschema@.build_check_constraint_name(partition, v_attname));
1135+
partition_relid::TEXT,
1136+
@extschema@.build_check_constraint_name(partition_relid, v_attname));
11371137

11381138
/* Invalidate cache*/
11391139
PERFORM @extschema@.on_update_partitions(parent_relid);
11401140

1141-
RETURNpartition;
1141+
RETURNpartition_relid;
11421142
END
11431143
$$
11441144
LANGUAGE plpgsql;

‎src/partition_creation.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,9 @@ create_single_partition_internal(Oid parent_relid,
780780
create_stmt.oncommit=ONCOMMIT_NOOP;
781781
create_stmt.tablespacename=tablespace;
782782
create_stmt.if_not_exists= false;
783+
#ifdefPGPRO_VERSION
784+
create_stmt.partition_info=NULL;
785+
#endif
783786

784787
/* Do we have to escalate privileges? */
785788
if (need_priv_escalation)

‎src/pl_funcs.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ PG_FUNCTION_INFO_V1( get_number_of_partitions_pl );
4242
PG_FUNCTION_INFO_V1(get_parent_of_partition_pl );
4343
PG_FUNCTION_INFO_V1(get_base_type_pl );
4444
PG_FUNCTION_INFO_V1(get_attribute_type_pl );
45+
PG_FUNCTION_INFO_V1(get_partition_key_type );
4546
PG_FUNCTION_INFO_V1(get_tablespace_pl );
4647

4748
PG_FUNCTION_INFO_V1(show_partition_list_internal );
@@ -228,6 +229,23 @@ get_attribute_type_pl(PG_FUNCTION_ARGS)
228229
PG_RETURN_OID(get_attribute_type(relid,text_to_cstring(attname), false));
229230
}
230231

232+
/*
233+
* Return partition key type
234+
*/
235+
Datum
236+
get_partition_key_type(PG_FUNCTION_ARGS)
237+
{
238+
Oidrelid=PG_GETARG_OID(0);
239+
constPartRelationInfo*prel=get_pathman_relation_info(relid);
240+
241+
if (!prel)
242+
elog(ERROR,
243+
"Relation '%s' isn't partitioned by pg_pathman",
244+
get_rel_name(relid));
245+
246+
PG_RETURN_OID(prel->atttype);
247+
}
248+
231249
/*
232250
* Return tablespace name for specified relation
233251
*/
@@ -254,7 +272,6 @@ get_tablespace_pl(PG_FUNCTION_ARGS)
254272
PG_RETURN_TEXT_P(cstring_to_text(result));
255273
}
256274

257-
258275
/*
259276
* ----------------------
260277
* Common purpose VIEWs

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp