Improve poor error report for Parallel hint.
-> Seq Scan on p1_c3_c2
(10 rows)
+-- Errors
+/*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
+ Parallel(p1 10 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
+EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
+INFO: pg_hint_plan: hint syntax error at or near "100x"
+DETAIL: number of workers must be a number: Parallel
+INFO: pg_hint_plan: hint syntax error at or near "-1000"
+DETAIL: number of workers must be positive: Parallel
+INFO: pg_hint_plan: hint syntax error at or near "1000000"
+DETAIL: number of workers = 1000000 is larger than max_worker_processes(100): Parallel
+INFO: pg_hint_plan: hint syntax error at or near "hoge"
+DETAIL: enforcement must be soft or hard: Parallel
+INFO: pg_hint_plan: hint syntax error at or near ")"
+DETAIL: wrong number of arguments (1): Parallel
+INFO: pg_hint_plan: hint syntax error at or near ")"
+DETAIL: wrong number of arguments (4): Parallel
+LOG: pg_hint_plan:
+used hint:
+not used hint:
+duplication hint:
+error hint:
+Parallel(p1 100x hard)
+Parallel(p1 -1000 hard)
+Parallel(p1 1000000 hard)
+Parallel(p1 10 hard)
+Parallel()
+Parallel()
+
+ QUERY PLAN
+-------------------------------------------
+ Gather
+ Workers Planned: 1
+ -> Append
+ -> Parallel Seq Scan on p1
+ -> Parallel Seq Scan on p1_c1
+ -> Parallel Seq Scan on p1_c2
+ -> Parallel Seq Scan on p1_c3
+ -> Parallel Seq Scan on p1_c4
+ -> Parallel Seq Scan on p1_c1_c1
+ -> Parallel Seq Scan on p1_c1_c2
+ -> Parallel Seq Scan on p1_c3_c1
+ -> Parallel Seq Scan on p1_c3_c2
+ -> Parallel Seq Scan on p2
+ -> Parallel Seq Scan on p2_c1
+ -> Parallel Seq Scan on p2_c2
+ -> Parallel Seq Scan on p2_c3
+ -> Parallel Seq Scan on p2_c4
+ -> Parallel Seq Scan on p2_c1_c1
+ -> Parallel Seq Scan on p2_c1_c2
+ -> Parallel Seq Scan on p2_c3_c1
+ -> Parallel Seq Scan on p2_c3_c2
+(21 rows)
+
ALTER SYSTEM SET session_preload_libraries TO DEFAULT;
SELECT pg_reload_conf();
pg_reload_conf
if (length < 2 || length > 3)
{
- hint_ereport(str,
- ("Wrong number of arguments for %s hint.",
- hint->base.keyword));
+ hint_ereport(")",
+ ("wrong number of arguments (%d): %s",
+ length, hint->base.keyword));
hint->base.state = HINT_STATE_ERROR;
return str;
}
/* The second parameter is number of workers */
hint->nworkers_str = list_nth(name_list, 1);
nworkers = strtod(hint->nworkers_str, &end_ptr);
- if (*end_ptr || nworkers < 0)
+ if (*end_ptr || nworkers < 0 || nworkers > max_worker_processes)
{
- hint_ereport(hint->nworkers_str,
- ("number of workers must be a positive integer: %s",
- hint->base.keyword));
+ if (*end_ptr)
+ hint_ereport(hint->nworkers_str,
+ ("number of workers must be a number: %s",
+ hint->base.keyword));
+ else if (nworkers < 0)
+ hint_ereport(hint->nworkers_str,
+ ("number of workers must be positive: %s",
+ hint->base.keyword));
+ if ( nworkers > max_worker_processes)
+ hint_ereport(hint->nworkers_str,
+ ("number of workers = %d is larger than max_worker_processes(%d): %s",
+ nworkers, max_worker_processes, hint->base.keyword));
+
hint->base.state = HINT_STATE_ERROR;
return str;
}
force_parallel = true;
else if (strcasecmp(modeparam, "soft") != 0)
{
- hint_ereport(str,
- ("The mode of Worker hint must be soft or hard."));
+ hint_ereport(modeparam,
+ ("enforcement must be soft or hard: %s",
+ hint->base.keyword));
hint->base.state = HINT_STATE_ERROR;
return str;
}
/*+Parallel(p1 0 hard)*/
EXPLAIN (COSTS false) SELECT * FROM p1;
+-- Errors
+/*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
+ Parallel(p1 10 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
+EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
+
ALTER SYSTEM SET session_preload_libraries TO DEFAULT;
SELECT pg_reload_conf();