delta-pgbench-init-partitioned-7.patch
application/octet-stream
Filename: delta-pgbench-init-partitioned-7.patch
Type: application/octet-stream
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/bin/pgbench/pgbench.c | 23 | 20 |
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 648a0c9865..dd6bad7302 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4999,8 +4999,8 @@ printResults(StatsData *total, instr_time total_time,
printf("transaction type: %s\n",
num_scripts == 1 ? sql_script[0].desc : "multiple scripts");
printf("scaling factor: %d\n", scale);
- /* only print partitioning information if some partitioning was detected */
- if (partition_method != PART_NONE && partition_method != PART_UNKNOWN)
+ /* print partitioning information only if there exists any partition */
+ if (partitions > 0)
printf("partition method: %s\npartitions: %d\n",
PARTITION_METHOD[partition_method], partitions);
printf("query mode: %s\n", QUERYMODE[querymode]);
@@ -5883,38 +5883,41 @@ main(int argc, char **argv)
* on search_path settings.
*/
res = PQexec(con,
- "select p.partstrat, count(*) "
+ "select count(*), p.partstrat "
"from pg_catalog.pg_class as c "
- "left join pg_catalog.pg_partitioned_table as p on (p.partrelid = c.oid) "
- "left join pg_catalog.pg_inherits as i on (c.oid = i.inhparent) "
+ "join pg_catalog.pg_partitioned_table as p on (p.partrelid = c.oid) "
+ "join pg_catalog.pg_inherits as i on (c.oid = i.inhparent) "
"where c.relname = 'pgbench_accounts' "
- "group by 1, c.oid");
+ "group by 2, c.oid");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
/* probably an older version, coldly assume no partitioning */
partition_method = PART_NONE;
partitions = 0;
}
- else if (PQntuples(res) != 1)
+ else if (PQntuples(res) > 1)
{
/* unsure because multiple pgbench_accounts found */
partition_method = PART_UNKNOWN;
partitions = 0;
}
- else
+ else if (PQntuples(res) == 1)
{
- char *ps = PQgetvalue(res, 0, 0);
-
- if (ps == NULL)
- partition_method = PART_NONE;
- else if (strcmp(ps, "r") == 0)
- partition_method = PART_RANGE;
- else if (strcmp(ps, "h") == 0)
- partition_method = PART_HASH;
- else /* whatever */
- partition_method = PART_NONE;
-
- partitions = atoi(PQgetvalue(res, 0, 1));
+ partitions = atoi(PQgetvalue(res, 0, 0));
+
+ if (partitions > 0)
+ {
+ char *ps = PQgetvalue(res, 0, 1);
+
+ Assert(ps != NULL);
+
+ if (strcmp(ps, "r") == 0)
+ partition_method = PART_RANGE;
+ else if (strcmp(ps, "h") == 0)
+ partition_method = PART_HASH;
+ else /* whatever */
+ partition_method = PART_NONE;
+ }
}
PQclear(res);
}