fix create index info

This commit is contained in:
ganyang
2022-06-07 14:22:31 +08:00
parent a53c9bb90f
commit 1fd4bd2bb4
5 changed files with 222 additions and 151 deletions

View File

@ -2971,7 +2971,7 @@ Datum pg_get_indexdef_for_dump(PG_FUNCTION_ARGS)
bool dumpSchemaOnly = PG_GETARG_BOOL(1);
PG_RETURN_TEXT_P(string_to_text(pg_get_indexdef_worker(indexrelid, 0, NULL, false, true, 0, dumpSchemaOnly,
true, false)));
true, true)));
}
Datum pg_get_indexdef_ext(PG_FUNCTION_ARGS)
@ -3026,10 +3026,12 @@ static void AppendOnePartitionIndex(Oid indexRelId, Oid partOid, bool showTblSpc
}
if (isSub) {
appendStringInfo(buf, "\n ");
appendStringInfo(buf, "\n ");
appendStringInfo(buf, "SUBPARTITION %s", quote_identifier(partIdxTuple->relname.data));
} else {
appendStringInfo(buf, "PARTITION %s", quote_identifier(partIdxTuple->relname.data));
}
appendStringInfo(buf, "PARTITION %s", quote_identifier(partIdxTuple->relname.data));
if (showTblSpc && OidIsValid(partIdxTuple->reltablespace)) {
char *tblspacName = get_tablespace_name(partIdxTuple->reltablespace);
if (tblspacName != NULL)
@ -3089,31 +3091,47 @@ static void pg_get_indexdef_partitions(Oid indexrelid, Form_pg_index idxrec, boo
}
List *partList = NIL;
ListCell *lc = NULL;
ListCell *lc1 = NULL;
ListCell *lc2 = NULL;
bool isFirst = true;
if (isSub) {
/* reserve this code, oneday we will support it */
partList = RelationGetSubPartitionOidList(rel);
} else {
partList = relationGetPartitionOidList(rel);
}
if (isSub) {
appendStringInfo(buf, "\n");
}
appendStringInfoChar(buf, '(');
foreach (lc, partList) {
Oid partOid = DatumGetObjectId(lfirst(lc));
AppendOnePartitionIndex(indexrelid, partOid, showTblSpc, &isFirst, buf, isSub);
}
if (isSub) {
int i = 0;
partList = RelationGetSubPartitionOidListList(rel);
int partListLen = list_length(partList);
appendStringInfo(buf, "\n");
foreach (lc1, partList) {
appendStringInfo(buf, " PARTITION partition_name(");
foreach (lc2, (List*)lfirst(lc1)) {
Oid partOid = DatumGetObjectId(lfirst(lc2));
AppendOnePartitionIndex(indexrelid, partOid, showTblSpc, &isFirst, buf, isSub);
}
appendStringInfo(buf, "\n )");
if (i != partListLen - 1) {
appendStringInfo(buf, ",\n");
}
isFirst = true;
i++;
}
appendStringInfo(buf, "\n");
} else {
partList = relationGetPartitionOidList(rel);
foreach (lc1, partList) {
Oid partOid = DatumGetObjectId(lfirst(lc1));
AppendOnePartitionIndex(indexrelid, partOid, showTblSpc, &isFirst, buf, isSub);
}
}
appendStringInfo(buf, ") ");
heap_close(rel, NoLock);
releasePartitionOidList(&partList);
if (isSub) {
ReleaseSubPartitionOidList(&partList);
} else {
releasePartitionOidList(&partList);
}
}
/*

View File

@ -449,103 +449,129 @@ create unique index list_hash_2_idx1 on list_hash_2(col_2, col_3, col_4) local;
create index list_hash_2_idx2 on list_hash_2(col_3, col_1) local;
create index list_hash_2_idx3 on list_hash_2(col_4) global;
select * from pg_get_tabledef('list_hash_2');
pg_get_tabledef
---------------------------------------------------------------------------------------------
SET search_path = test_get_table_def; +
CREATE TABLE list_hash_2 ( +
col_1 integer NOT NULL, +
col_2 integer, +
col_3 character varying(30), +
col_4 integer +
) +
WITH (orientation=row, compression=no) +
PARTITION BY LIST (col_2) SUBPARTITION BY HASH (col_3) +
( +
PARTITION p_list_1 VALUES (-1,-2,-3,-4,-5,-6,-7,-8,-9,-10) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_1_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_1_2 TABLESPACE pg_default, +
SUBPARTITION p_hash_1_3 TABLESPACE pg_default +
), +
PARTITION p_list_2 VALUES (1,2,3,4,5,6,7,8,9,10) TABLESPACE pg_default +
( +
SUBPARTITION p_list_2_subpartdefault1 TABLESPACE pg_default +
), +
PARTITION p_list_3 VALUES (11,12,13,14,15,16,17,18,19,20) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_3_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_3_2 TABLESPACE pg_default +
), +
PARTITION p_list_4 VALUES (21,22,23,24,25,26,27,28,29,30) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_4_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_2 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_3 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_4 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_5 TABLESPACE pg_default +
), +
PARTITION p_list_5 VALUES (31,32,33,34,35,36,37,38,39,40) TABLESPACE pg_default +
( +
SUBPARTITION p_list_5_subpartdefault1 TABLESPACE pg_default +
), +
PARTITION p_list_6 VALUES (41,42,43,44,45,46,47,48,49,50) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_6_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_2 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_3 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_4 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_5 TABLESPACE pg_default +
), +
PARTITION p_list_7 VALUES (DEFAULT) TABLESPACE pg_default +
( +
SUBPARTITION p_list_7_subpartdefault1 TABLESPACE pg_default +
) +
) +
ENABLE ROW MOVEMENT; +
CREATE INDEX list_hash_2_idx3 ON list_hash_2 USING btree (col_4) TABLESPACE pg_default; +
CREATE INDEX list_hash_2_idx2 ON list_hash_2 USING btree (col_3, col_1) LOCAL +
( +
PARTITION p_list_7_subpartdefault1_col_3_col_1_idx, +
PARTITION p_hash_6_5_col_3_col_1_idx, +
PARTITION p_hash_6_4_col_3_col_1_idx, +
PARTITION p_hash_6_3_col_3_col_1_idx, +
PARTITION p_hash_6_2_col_3_col_1_idx, +
PARTITION p_hash_6_1_col_3_col_1_idx, +
PARTITION p_list_5_subpartdefault1_col_3_col_1_idx, +
PARTITION p_hash_4_5_col_3_col_1_idx, +
PARTITION p_hash_4_4_col_3_col_1_idx, +
PARTITION p_hash_4_3_col_3_col_1_idx, +
PARTITION p_hash_4_2_col_3_col_1_idx, +
PARTITION p_hash_4_1_col_3_col_1_idx, +
PARTITION p_hash_3_2_col_3_col_1_idx, +
PARTITION p_hash_3_1_col_3_col_1_idx, +
PARTITION p_list_2_subpartdefault1_col_3_col_1_idx, +
PARTITION p_hash_1_3_col_3_col_1_idx, +
PARTITION p_hash_1_2_col_3_col_1_idx, +
PARTITION p_hash_1_1_col_3_col_1_idx +
) TABLESPACE pg_default; +
CREATE UNIQUE INDEX list_hash_2_idx1 ON list_hash_2 USING btree (col_2, col_3, col_4) LOCAL+
( +
PARTITION p_list_7_subpartdefault1_col_2_col_3_col_4_idx, +
PARTITION p_hash_6_5_col_2_col_3_col_4_idx, +
PARTITION p_hash_6_4_col_2_col_3_col_4_idx, +
PARTITION p_hash_6_3_col_2_col_3_col_4_idx, +
PARTITION p_hash_6_2_col_2_col_3_col_4_idx, +
PARTITION p_hash_6_1_col_2_col_3_col_4_idx, +
PARTITION p_list_5_subpartdefault1_col_2_col_3_col_4_idx, +
PARTITION p_hash_4_5_col_2_col_3_col_4_idx, +
PARTITION p_hash_4_4_col_2_col_3_col_4_idx, +
PARTITION p_hash_4_3_col_2_col_3_col_4_idx, +
PARTITION p_hash_4_2_col_2_col_3_col_4_idx, +
PARTITION p_hash_4_1_col_2_col_3_col_4_idx, +
PARTITION p_hash_3_2_col_2_col_3_col_4_idx, +
PARTITION p_hash_3_1_col_2_col_3_col_4_idx, +
PARTITION p_list_2_subpartdefault1_col_2_col_3_col_4_idx, +
PARTITION p_hash_1_3_col_2_col_3_col_4_idx, +
PARTITION p_hash_1_2_col_2_col_3_col_4_idx, +
PARTITION p_hash_1_1_col_2_col_3_col_4_idx +
) TABLESPACE pg_default; +
ALTER TABLE list_hash_2 ADD CONSTRAINT list_hash_2_col_3_tableoid_key UNIQUE (col_3); +
pg_get_tabledef
----------------------------------------------------------------------------------------------
SET search_path = test_get_table_def; +
CREATE TABLE list_hash_2 ( +
col_1 integer NOT NULL, +
col_2 integer, +
col_3 character varying(30), +
col_4 integer +
) +
WITH (orientation=row, compression=no) +
PARTITION BY LIST (col_2) SUBPARTITION BY HASH (col_3) +
( +
PARTITION p_list_1 VALUES (-1,-2,-3,-4,-5,-6,-7,-8,-9,-10) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_1_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_1_2 TABLESPACE pg_default, +
SUBPARTITION p_hash_1_3 TABLESPACE pg_default +
), +
PARTITION p_list_2 VALUES (1,2,3,4,5,6,7,8,9,10) TABLESPACE pg_default +
( +
SUBPARTITION p_list_2_subpartdefault1 TABLESPACE pg_default +
), +
PARTITION p_list_3 VALUES (11,12,13,14,15,16,17,18,19,20) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_3_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_3_2 TABLESPACE pg_default +
), +
PARTITION p_list_4 VALUES (21,22,23,24,25,26,27,28,29,30) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_4_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_2 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_3 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_4 TABLESPACE pg_default, +
SUBPARTITION p_hash_4_5 TABLESPACE pg_default +
), +
PARTITION p_list_5 VALUES (31,32,33,34,35,36,37,38,39,40) TABLESPACE pg_default +
( +
SUBPARTITION p_list_5_subpartdefault1 TABLESPACE pg_default +
), +
PARTITION p_list_6 VALUES (41,42,43,44,45,46,47,48,49,50) TABLESPACE pg_default +
( +
SUBPARTITION p_hash_6_1 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_2 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_3 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_4 TABLESPACE pg_default, +
SUBPARTITION p_hash_6_5 TABLESPACE pg_default +
), +
PARTITION p_list_7 VALUES (DEFAULT) TABLESPACE pg_default +
( +
SUBPARTITION p_list_7_subpartdefault1 TABLESPACE pg_default +
) +
) +
ENABLE ROW MOVEMENT; +
CREATE INDEX list_hash_2_idx3 ON list_hash_2 USING btree (col_4) TABLESPACE pg_default; +
CREATE INDEX list_hash_2_idx2 ON list_hash_2 USING btree (col_3, col_1) LOCAL( +
PARTITION partition_name( +
SUBPARTITION p_list_7_subpartdefault1_col_3_col_1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_6_5_col_3_col_1_idx, +
SUBPARTITION p_hash_6_4_col_3_col_1_idx, +
SUBPARTITION p_hash_6_3_col_3_col_1_idx, +
SUBPARTITION p_hash_6_2_col_3_col_1_idx, +
SUBPARTITION p_hash_6_1_col_3_col_1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_list_5_subpartdefault1_col_3_col_1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_4_5_col_3_col_1_idx, +
SUBPARTITION p_hash_4_4_col_3_col_1_idx, +
SUBPARTITION p_hash_4_3_col_3_col_1_idx, +
SUBPARTITION p_hash_4_2_col_3_col_1_idx, +
SUBPARTITION p_hash_4_1_col_3_col_1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_3_2_col_3_col_1_idx, +
SUBPARTITION p_hash_3_1_col_3_col_1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_list_2_subpartdefault1_col_3_col_1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_1_3_col_3_col_1_idx, +
SUBPARTITION p_hash_1_2_col_3_col_1_idx, +
SUBPARTITION p_hash_1_1_col_3_col_1_idx +
) +
) TABLESPACE pg_default; +
CREATE UNIQUE INDEX list_hash_2_idx1 ON list_hash_2 USING btree (col_2, col_3, col_4) LOCAL(+
PARTITION partition_name( +
SUBPARTITION p_list_7_subpartdefault1_col_2_col_3_col_4_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_6_5_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_6_4_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_6_3_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_6_2_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_6_1_col_2_col_3_col_4_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_list_5_subpartdefault1_col_2_col_3_col_4_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_4_5_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_4_4_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_4_3_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_4_2_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_4_1_col_2_col_3_col_4_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_3_2_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_3_1_col_2_col_3_col_4_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_list_2_subpartdefault1_col_2_col_3_col_4_idx +
), +
PARTITION partition_name( +
SUBPARTITION p_hash_1_3_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_1_2_col_2_col_3_col_4_idx, +
SUBPARTITION p_hash_1_1_col_2_col_3_col_4_idx +
) +
) TABLESPACE pg_default; +
ALTER TABLE list_hash_2 ADD CONSTRAINT list_hash_2_col_3_tableoid_key UNIQUE (col_3); +
ALTER TABLE list_hash_2 ADD CONSTRAINT list_hash_2_pkey PRIMARY KEY (col_1);
(1 row)

View File

@ -1549,18 +1549,27 @@ select pg_get_tabledef('range_range_03');
ENABLE ROW MOVEMENT; +
CREATE INDEX range_range_03_idx4 ON range_range_03 USING btree (c_varchar4) TABLESPACE pg_default;+
CREATE INDEX range_range_03_idx3 ON range_range_03 USING btree (c_varchar3) TABLESPACE pg_default;+
CREATE INDEX range_range_03_idx1 ON range_range_03 USING btree (c_varchar1) LOCAL +
( +
PARTITION p1_1_c_varchar1_idx, +
PARTITION p1_2_c_varchar1_idx, +
PARTITION p2_1_c_varchar1_idx, +
PARTITION p2_2_c_varchar1_idx, +
PARTITION p3_1_c_varchar1_idx, +
PARTITION p3_2_c_varchar1_idx, +
PARTITION p4_1_c_varchar1_idx, +
PARTITION p4_2_c_varchar1_idx, +
PARTITION p5_1_c_varchar1_idx, +
PARTITION p5_2_c_varchar1_idx +
CREATE INDEX range_range_03_idx1 ON range_range_03 USING btree (c_varchar1) LOCAL( +
PARTITION partition_name( +
SUBPARTITION p1_1_c_varchar1_idx, +
SUBPARTITION p1_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p2_1_c_varchar1_idx, +
SUBPARTITION p2_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p3_1_c_varchar1_idx, +
SUBPARTITION p3_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p4_1_c_varchar1_idx, +
SUBPARTITION p4_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p5_1_c_varchar1_idx, +
SUBPARTITION p5_2_c_varchar1_idx +
) +
) TABLESPACE pg_default; +
ALTER TABLE range_range_03 ADD CONSTRAINT range_range_03_pkey PRIMARY KEY (c, c_int);
(1 row)

View File

@ -1455,18 +1455,27 @@ select pg_get_tabledef('range_range_03');
ENABLE ROW MOVEMENT; +
CREATE INDEX range_range_03_idx4 ON range_range_03 USING btree (c_varchar4) TABLESPACE pg_default;+
CREATE INDEX range_range_03_idx3 ON range_range_03 USING btree (c_varchar3) TABLESPACE pg_default;+
CREATE INDEX range_range_03_idx1 ON range_range_03 USING btree (c_varchar1) LOCAL +
( +
PARTITION p1_1_c_varchar1_idx, +
PARTITION p1_2_c_varchar1_idx, +
PARTITION p2_1_c_varchar1_idx, +
PARTITION p2_2_c_varchar1_idx, +
PARTITION p3_1_c_varchar1_idx, +
PARTITION p3_2_c_varchar1_idx, +
PARTITION p4_1_c_varchar1_idx, +
PARTITION p4_2_c_varchar1_idx, +
PARTITION p5_1_c_varchar1_idx, +
PARTITION p5_2_c_varchar1_idx +
CREATE INDEX range_range_03_idx1 ON range_range_03 USING btree (c_varchar1) LOCAL( +
PARTITION partition_name( +
SUBPARTITION p1_1_c_varchar1_idx, +
SUBPARTITION p1_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p2_1_c_varchar1_idx, +
SUBPARTITION p2_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p3_1_c_varchar1_idx, +
SUBPARTITION p3_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p4_1_c_varchar1_idx, +
SUBPARTITION p4_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p5_1_c_varchar1_idx, +
SUBPARTITION p5_2_c_varchar1_idx +
) +
) TABLESPACE pg_default; +
ALTER TABLE range_range_03 ADD CONSTRAINT range_range_03_pkey PRIMARY KEY (c, c_int);
(1 row)

View File

@ -1455,18 +1455,27 @@ select pg_get_tabledef('range_range_03');
ENABLE ROW MOVEMENT; +
CREATE INDEX range_range_03_idx4 ON range_range_03 USING ubtree (c_varchar4) WITH (storage_type=USTORE) TABLESPACE pg_default;+
CREATE INDEX range_range_03_idx3 ON range_range_03 USING ubtree (c_varchar3) WITH (storage_type=USTORE) TABLESPACE pg_default;+
CREATE INDEX range_range_03_idx1 ON range_range_03 USING ubtree (c_varchar1) LOCAL +
( +
PARTITION p1_1_c_varchar1_idx, +
PARTITION p1_2_c_varchar1_idx, +
PARTITION p2_1_c_varchar1_idx, +
PARTITION p2_2_c_varchar1_idx, +
PARTITION p3_1_c_varchar1_idx, +
PARTITION p3_2_c_varchar1_idx, +
PARTITION p4_1_c_varchar1_idx, +
PARTITION p4_2_c_varchar1_idx, +
PARTITION p5_1_c_varchar1_idx, +
PARTITION p5_2_c_varchar1_idx +
CREATE INDEX range_range_03_idx1 ON range_range_03 USING ubtree (c_varchar1) LOCAL( +
PARTITION partition_name( +
SUBPARTITION p1_1_c_varchar1_idx, +
SUBPARTITION p1_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p2_1_c_varchar1_idx, +
SUBPARTITION p2_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p3_1_c_varchar1_idx, +
SUBPARTITION p3_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p4_1_c_varchar1_idx, +
SUBPARTITION p4_2_c_varchar1_idx +
), +
PARTITION partition_name( +
SUBPARTITION p5_1_c_varchar1_idx, +
SUBPARTITION p5_2_c_varchar1_idx +
) +
) WITH (storage_type=USTORE) TABLESPACE pg_default; +
ALTER TABLE range_range_03 ADD CONSTRAINT range_range_03_pkey PRIMARY KEY (c, c_int) WITH (storage_type=USTORE);
(1 row)