diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index c0e5e24..d7a3f57 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -2520,6 +2520,8 @@ main(int argc, char **argv)
 	char	   *filename = NULL;
 	bool		scale_given = false;
 
+	bool		is_non_init_param_set = false;
+
 	CState	   *state;			/* status of clients */
 	TState	   *threads;		/* array of thread */
 
@@ -2599,12 +2601,14 @@ main(int argc, char **argv)
 				break;
 			case 'S':
 				ttype = 1;
+				is_non_init_param_set = true;
 				break;
 			case 'N':
 				ttype = 2;
+				is_non_init_param_set = true;
 				break;
 			case 'c':
-				nclients = atoi(optarg);
+				is_non_init_param_set = true;
 				if (nclients <= 0 || nclients > MAXCLIENTS)
 				{
 					fprintf(stderr, "invalid number of clients: %d\n", nclients);
@@ -2629,6 +2633,7 @@ main(int argc, char **argv)
 #endif   /* HAVE_GETRLIMIT */
 				break;
 			case 'j':			/* jobs */
+				is_non_init_param_set = true;
 				nthreads = atoi(optarg);
 				if (nthreads <= 0)
 				{
@@ -2637,9 +2642,11 @@ main(int argc, char **argv)
 				}
 				break;
 			case 'C':
+				is_non_init_param_set = true;
 				is_connect = true;
 				break;
 			case 'r':
+				is_non_init_param_set = true;
 				is_latencies = true;
 				break;
 			case 's':
@@ -2652,6 +2659,7 @@ main(int argc, char **argv)
 				}
 				break;
 			case 't':
+				is_non_init_param_set = true;
 				if (duration > 0)
 				{
 					fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n");
@@ -2665,6 +2673,7 @@ main(int argc, char **argv)
 				}
 				break;
 			case 'T':
+				is_non_init_param_set = true;
 				if (nxacts > 0)
 				{
 					fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n");
@@ -2681,12 +2690,14 @@ main(int argc, char **argv)
 				login = pg_strdup(optarg);
 				break;
 			case 'l':
+				is_non_init_param_set = true;
 				use_log = true;
 				break;
 			case 'q':
 				use_quiet = true;
 				break;
 			case 'f':
+				is_non_init_param_set = true;
 				ttype = 3;
 				filename = pg_strdup(optarg);
 				if (process_file(filename) == false || *sql_files[num_files - 1] == NULL)
@@ -2696,6 +2707,8 @@ main(int argc, char **argv)
 				{
 					char	   *p;
 
+					is_non_init_param_set = true;
+
 					if ((p = strchr(optarg, '=')) == NULL || p == optarg || *(p + 1) == '\0')
 					{
 						fprintf(stderr, "invalid variable definition: %s\n", optarg);
@@ -2716,6 +2729,7 @@ main(int argc, char **argv)
 				}
 				break;
 			case 'M':
+				is_non_init_param_set = true;
 				if (num_files > 0)
 				{
 					fprintf(stderr, "query mode (-M) should be specifiled before transaction scripts (-f)\n");
@@ -2731,6 +2745,7 @@ main(int argc, char **argv)
 				}
 				break;
 			case 'P':
+				is_non_init_param_set = true;
 				progress = atoi(optarg);
 				if (progress <= 0)
 				{
@@ -2745,6 +2760,8 @@ main(int argc, char **argv)
 					/* get a double from the beginning of option value */
 					double		throttle_value = atof(optarg);
 
+					is_non_init_param_set = true;
+
 					if (throttle_value <= 0.0)
 					{
 						fprintf(stderr, "invalid rate limit: %s\n", optarg);
@@ -2764,6 +2781,7 @@ main(int argc, char **argv)
 				index_tablespace = pg_strdup(optarg);
 				break;
 			case 4:
+				is_non_init_param_set = true;
 				sample_rate = atof(optarg);
 				if (sample_rate <= 0.0 || sample_rate > 1.0)
 				{
@@ -2776,6 +2794,7 @@ main(int argc, char **argv)
 				fprintf(stderr, "--aggregate-interval is not currently supported on Windows");
 				exit(1);
 #else
+				is_non_init_param_set = true;
 				agg_interval = atoi(optarg);
 				if (agg_interval <= 0)
 				{
@@ -2808,6 +2827,12 @@ main(int argc, char **argv)
 
 	if (is_init_mode)
 	{
+		if (is_non_init_param_set)
+		{
+			fprintf(stderr, "some parameters cannot be used in initialize mode\n");
+			exit(1);
+		}
+
 		init(is_no_vacuum);
 		exit(0);
 	}
