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

Commitd362034

Browse files
committed
Merge branch 'master' into rel_future_beta
2 parentsc9e46e8 +fda1b36 commitd362034

File tree

10 files changed

+216
-49
lines changed

10 files changed

+216
-49
lines changed

‎expected/pathman_utility_stmt.out

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,58 @@ NOTICE: drop cascades to 797 other objects
285285
* Test auto check constraint renaming
286286
*/
287287
CREATE SCHEMA rename;
288+
/*
289+
* Check that auto naming sequence is renamed
290+
*/
291+
CREATE TABLE rename.parent(id int not null);
292+
SELECT create_range_partitions('rename.parent', 'id', 1, 2, 2);
293+
create_range_partitions
294+
-------------------------
295+
2
296+
(1 row)
297+
298+
SELECT 'rename.parent'::regclass;/* parent is OK */
299+
regclass
300+
---------------
301+
rename.parent
302+
(1 row)
303+
304+
SELECT 'rename.parent_seq'::regclass;/* sequence is OK */
305+
regclass
306+
-------------------
307+
rename.parent_seq
308+
(1 row)
309+
310+
ALTER TABLE rename.parent RENAME TO parent_renamed;
311+
SELECT 'rename.parent_renamed'::regclass;/* parent is OK */
312+
regclass
313+
-----------------------
314+
rename.parent_renamed
315+
(1 row)
316+
317+
SELECT 'rename.parent_renamed_seq'::regclass;/* sequence is OK */
318+
regclass
319+
---------------------------
320+
rename.parent_renamed_seq
321+
(1 row)
322+
323+
SELECT append_range_partition('rename.parent_renamed'); /* can append */
324+
append_range_partition
325+
-------------------------
326+
rename.parent_renamed_3
327+
(1 row)
328+
329+
DROP SEQUENCE rename.parent_renamed_seq;
330+
ALTER TABLE rename.parent_renamed RENAME TO parent;
331+
SELECT 'rename.parent'::regclass;/* parent is OK */
332+
regclass
333+
---------------
334+
rename.parent
335+
(1 row)
336+
337+
/*
338+
* Check that partitioning constraints are renamed
339+
*/
288340
CREATE TABLE rename.test(a serial, b int);
289341
SELECT create_hash_partitions('rename.test', 'a', 3);
290342
create_hash_partitions
@@ -336,7 +388,9 @@ WHERE r.conrelid = 'rename.test_inh_one'::regclass AND r.contype = 'c';
336388
pathman_test_inh_1_check | CHECK (a < 100)
337389
(1 row)
338390

339-
/* Check that plain tables are not affected too */
391+
/*
392+
* Check that plain tables are not affected too
393+
*/
340394
CREATE TABLE rename.plain_test(a serial, b int);
341395
ALTER TABLE rename.plain_test RENAME TO plain_test_renamed;
342396
SELECT add_constraint('rename.plain_test_renamed');
@@ -365,7 +419,7 @@ WHERE r.conrelid = 'rename.plain_test'::regclass AND r.contype = 'c';
365419
(1 row)
366420

367421
DROP SCHEMA rename CASCADE;
368-
NOTICE: drop cascades to7 other objects
422+
NOTICE: drop cascades to11 other objects
369423
/*
370424
* Test DROP INDEX CONCURRENTLY (test snapshots)
371425
*/

‎sql/pathman_utility_stmt.sql

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,25 @@ DROP SCHEMA copy_stmt_hooking CASCADE;
167167
*/
168168
CREATESCHEMArename;
169169

170+
171+
/*
172+
* Check that auto naming sequence is renamed
173+
*/
174+
CREATETABLErename.parent(idintnot null);
175+
SELECT create_range_partitions('rename.parent','id',1,2,2);
176+
SELECT'rename.parent'::regclass;/* parent is OK*/
177+
SELECT'rename.parent_seq'::regclass;/* sequence is OK*/
178+
ALTERTABLErename.parent RENAME TO parent_renamed;
179+
SELECT'rename.parent_renamed'::regclass;/* parent is OK*/
180+
SELECT'rename.parent_renamed_seq'::regclass;/* sequence is OK*/
181+
SELECT append_range_partition('rename.parent_renamed');/* can append*/
182+
DROPSEQUENCErename.parent_renamed_seq;
183+
ALTERTABLErename.parent_renamed RENAME TO parent;
184+
SELECT'rename.parent'::regclass;/* parent is OK*/
185+
186+
/*
187+
* Check that partitioning constraints are renamed
188+
*/
170189
CREATETABLErename.test(aserial, bint);
171190
SELECT create_hash_partitions('rename.test','a',3);
172191
ALTERTABLErename.test_0 RENAME TO test_one;
@@ -201,7 +220,9 @@ SELECT r.conname, pg_get_constraintdef(r.oid, true)
201220
FROM pg_constraint r
202221
WHEREr.conrelid='rename.test_inh_one'::regclassANDr.contype='c';
203222

204-
/* Check that plain tables are not affected too*/
223+
/*
224+
* Check that plain tables are not affected too
225+
*/
205226
CREATETABLErename.plain_test(aserial, bint);
206227
ALTERTABLErename.plain_test RENAME TO plain_test_renamed;
207228
SELECT add_constraint('rename.plain_test_renamed');
@@ -216,6 +237,7 @@ SELECT r.conname, pg_get_constraintdef(r.oid, true)
216237
FROM pg_constraint r
217238
WHEREr.conrelid='rename.plain_test'::regclassANDr.contype='c';
218239

240+
219241
DROPSCHEMA rename CASCADE;
220242

221243

‎src/hooks.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -882,6 +882,7 @@ pathman_process_utility_hook(Node *first_arg,
882882
Oidrelation_oid;
883883
PartTypepart_type;
884884
AttrNumberattr_number;
885+
boolis_parent;
885886

886887
/* Override standard COPY statement if needed */
887888
if (is_pathman_related_copy(parsetree))
@@ -900,10 +901,15 @@ pathman_process_utility_hook(Node *first_arg,
900901

901902
/* Override standard RENAME statement if needed */
902903
elseif (is_pathman_related_table_rename(parsetree,
903-
&relation_oid))
904+
&relation_oid,
905+
&is_parent))
904906
{
905-
PathmanRenameConstraint(relation_oid,
906-
(constRenameStmt*)parsetree);
907+
constRenameStmt*rename_stmt= (constRenameStmt*)parsetree;
908+
909+
if (is_parent)
910+
PathmanRenameSequence(relation_oid,rename_stmt);
911+
else
912+
PathmanRenameConstraint(relation_oid,rename_stmt);
907913
}
908914

909915
/* Override standard ALTER COLUMN TYPE statement if needed */

‎src/include/init.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ find_children_status find_inheritance_children_array(Oid parentrelId,
201201
char*build_check_constraint_name_relid_internal(Oidrelid);
202202
char*build_check_constraint_name_relname_internal(constchar*relname);
203203

204-
char*build_sequence_name_internal(Oidrelid);
204+
char*build_sequence_name_relid_internal(Oidrelid);
205+
char*build_sequence_name_relname_internal(constchar*relname);
205206

206207
char*build_update_trigger_name_internal(Oidrelid);
207208
char*build_update_trigger_func_name_internal(Oidrelid);

‎src/include/utility_stmt_hooking.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
/* Various traits */
2424
boolis_pathman_related_copy(Node*parsetree);
2525
boolis_pathman_related_table_rename(Node*parsetree,
26-
Oid*partition_relid_out);
26+
Oid*relation_oid_out,
27+
bool*is_parent_out);
2728
boolis_pathman_related_alter_column_type(Node*parsetree,
2829
Oid*parent_relid_out,
2930
AttrNumber*attr_number,
@@ -32,8 +33,9 @@ bool is_pathman_related_alter_column_type(Node *parsetree,
3233
/* Statement handlers */
3334
voidPathmanDoCopy(constCopyStmt*stmt,constchar*queryString,
3435
intstmt_location,intstmt_len,uint64*processed);
35-
voidPathmanRenameConstraint(Oidpartition_relid,
36-
constRenameStmt*partition_rename_stmt);
36+
37+
voidPathmanRenameConstraint(Oidpartition_relid,constRenameStmt*rename_stmt);
38+
voidPathmanRenameSequence(Oidparent_relid,constRenameStmt*rename_stmt);
3739

3840

3941
#endif/* COPY_STMT_HOOKING_H */

‎src/init.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,7 @@ build_check_constraint_name_relid_internal(Oid relid)
569569
char*
570570
build_check_constraint_name_relname_internal(constchar*relname)
571571
{
572+
AssertArg(relname!=NULL);
572573
returnpsprintf("pathman_%s_check",relname);
573574
}
574575

@@ -577,10 +578,21 @@ build_check_constraint_name_relname_internal(const char *relname)
577578
* NOTE: this function does not perform sanity checks at all.
578579
*/
579580
char*
580-
build_sequence_name_internal(Oidrelid)
581+
build_sequence_name_relid_internal(Oidrelid)
581582
{
582583
AssertArg(OidIsValid(relid));
583-
returnpsprintf("%s_seq",get_rel_name(relid));
584+
returnbuild_sequence_name_relname_internal(get_rel_name(relid));
585+
}
586+
587+
/*
588+
* Generate part sequence name for a parent.
589+
* NOTE: this function does not perform sanity checks at all.
590+
*/
591+
char*
592+
build_sequence_name_relname_internal(constchar*relname)
593+
{
594+
AssertArg(relname!=NULL);
595+
returnpsprintf("%s_seq",relname);
584596
}
585597

586598
/*

‎src/partition_creation.c

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -594,22 +594,31 @@ spawn_partitions_val(Oid parent_relid,/* parent's Oid */
594594
staticchar*
595595
choose_range_partition_name(Oidparent_relid,Oidparent_nsp)
596596
{
597-
Datumpart_num;
598-
Oidpart_seq_relid;
599-
char*part_seq_relname;
600-
Oidsave_userid;
601-
intsave_sec_context;
602-
boolneed_priv_escalation= !superuser();/* we might be a SU */
603-
char*relname;
604-
intattempts_cnt=1000;
605-
606-
part_seq_relname=build_sequence_name_internal(parent_relid);
607-
part_seq_relid=get_relname_relid(part_seq_relname,parent_nsp);
597+
Datumpart_num;
598+
Oidpart_seq_relid;
599+
char*part_seq_nspname,
600+
*part_seq_relname;
601+
RangeVar*part_seq_rv;
602+
Oidsave_userid;
603+
intsave_sec_context;
604+
boolneed_priv_escalation= !superuser();/* we might be a SU */
605+
char*relname;
606+
intattempts_cnt=1000;
607+
608+
/* Dispatch sequence and lock it using AccessShareLock */
609+
part_seq_nspname=get_namespace_name(get_rel_namespace(parent_relid));
610+
part_seq_relname=build_sequence_name_relid_internal(parent_relid);
611+
part_seq_rv=makeRangeVar(part_seq_nspname,part_seq_relname,-1);
612+
part_seq_relid=RangeVarGetRelid(part_seq_rv,AccessShareLock, true);
608613

609614
/* Could not find part number generating sequence */
610615
if (!OidIsValid(part_seq_relid))
611616
elog(ERROR,"auto naming sequence \"%s\" does not exist",part_seq_relname);
612617

618+
pfree(part_seq_nspname);
619+
pfree(part_seq_relname);
620+
pfree(part_seq_rv);
621+
613622
/* Do we have to escalate privileges? */
614623
if (need_priv_escalation)
615624
{

‎src/pl_funcs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,7 @@ add_to_pathman_config(PG_FUNCTION_ARGS)
886886
Oidnaming_seq;
887887

888888
naming_seq_rv=makeRangeVar(get_namespace_name(get_rel_namespace(relid)),
889-
build_sequence_name_internal(relid),
889+
build_sequence_name_relid_internal(relid),
890890
-1);
891891

892892
naming_seq=RangeVarGetRelid(naming_seq_rv,AccessShareLock, true);

‎src/pl_range_funcs.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,16 +589,18 @@ build_sequence_name(PG_FUNCTION_ARGS)
589589
{
590590
Oidparent_relid=PG_GETARG_OID(0);
591591
Oidparent_nsp;
592+
char*seq_name;
592593
char*result;
593594

594595
if (!SearchSysCacheExists1(RELOID,ObjectIdGetDatum(parent_relid)))
595596
ereport(ERROR, (errmsg("relation \"%u\" does not exist",parent_relid)));
596597

597598
parent_nsp=get_rel_namespace(parent_relid);
599+
seq_name=build_sequence_name_relid_internal(parent_relid);
598600

599601
result=psprintf("%s.%s",
600602
quote_identifier(get_namespace_name(parent_nsp)),
601-
quote_identifier(build_sequence_name_internal(parent_relid)));
603+
quote_identifier(seq_name));
602604

603605
PG_RETURN_TEXT_P(cstring_to_text(result));
604606
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp