diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
index 03e1212..ec63992 100644
--- a/doc/src/sgml/ref/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -248,6 +248,15 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>--no-primary-keys</option></term>
+      <listitem>
+       <para>
+        Create no primary keys after initialization.
+       </para>
+      </listitem>
+     </varlistentry>
+     
     </variablelist>
    </para>
 
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 4d364a1..c475d43 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -477,6 +477,7 @@ usage(void)
 		   "  -i, --initialize         invokes initialization mode\n"
 		   "  -F, --fillfactor=NUM     set fill factor\n"
 		   "  -n, --no-vacuum          do not run VACUUM after initialization\n"
+		   "  -I, --no-primary-keys    skip building primary keys after initialization\n"
 		   "  -q, --quiet              quiet logging (one message each 5 seconds)\n"
 		   "  -s, --scale=NUM          scaling factor\n"
 		   "  --foreign-keys           create foreign key constraints between tables\n"
@@ -2568,7 +2569,7 @@ disconnect_all(CState *state, int length)
 
 /* create tables and setup data */
 static void
-init(bool is_no_vacuum)
+init(bool is_no_vacuum, bool is_no_pkeys)
 {
 /*
  * The scale factor at/beyond which 32-bit integers are insufficient for
@@ -2806,25 +2807,28 @@ init(bool is_no_vacuum)
 	/*
 	 * create indexes
 	 */
-	fprintf(stderr, "set primary keys...\n");
-	for (i = 0; i < lengthof(DDLINDEXes); i++)
+	if (!is_no_pkeys)
 	{
-		char		buffer[256];
+		fprintf(stderr, "set primary keys...\n");
+		for (i = 0; i < lengthof(DDLINDEXes); i++)
+		{
+			char		buffer[256];
 
-		strlcpy(buffer, DDLINDEXes[i], sizeof(buffer));
+			strlcpy(buffer, DDLINDEXes[i], sizeof(buffer));
 
-		if (index_tablespace != NULL)
-		{
-			char	   *escape_tablespace;
+			if (index_tablespace != NULL)
+			{
+				char	   *escape_tablespace;
 
-			escape_tablespace = PQescapeIdentifier(con, index_tablespace,
-												   strlen(index_tablespace));
-			snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer),
-					 " using index tablespace %s", escape_tablespace);
-			PQfreemem(escape_tablespace);
-		}
+				escape_tablespace = PQescapeIdentifier(con, index_tablespace,
+													   strlen(index_tablespace));
+				snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer),
+						 " using index tablespace %s", escape_tablespace);
+				PQfreemem(escape_tablespace);
+			}
 
-		executeStatement(con, buffer);
+			executeStatement(con, buffer);
+		}
 	}
 
 	/*
@@ -3623,6 +3627,7 @@ main(int argc, char **argv)
 		{"log", no_argument, NULL, 'l'},
 		{"latency-limit", required_argument, NULL, 'L'},
 		{"no-vacuum", no_argument, NULL, 'n'},
+		{"no-primary-keys", no_argument, NULL, 'I'},
 		{"port", required_argument, NULL, 'p'},
 		{"progress", required_argument, NULL, 'P'},
 		{"protocol", required_argument, NULL, 'M'},
@@ -3651,6 +3656,7 @@ main(int argc, char **argv)
 	int			c;
 	int			is_init_mode = 0;	/* initialize mode? */
 	int			is_no_vacuum = 0;	/* no vacuum at all before testing? */
+	int			is_no_pkeys = 0;	/* no primary keys build at after initialization */
 	int			do_vacuum_accounts = 0; /* do vacuum accounts before testing? */
 	int			optindex;
 	bool		scale_given = false;
@@ -3711,7 +3717,7 @@ main(int argc, char **argv)
 	state = (CState *) pg_malloc(sizeof(CState));
 	memset(state, 0, sizeof(CState));
 
-	while ((c = getopt_long(argc, argv, "ih:nvp:dqb:SNc:j:Crs:t:T:U:lf:D:F:M:P:R:L:", long_options, &optindex)) != -1)
+	while ((c = getopt_long(argc, argv, "iIh:nvp:dqb:SNc:j:Crs:t:T:U:lf:D:F:M:P:R:L:", long_options, &optindex)) != -1)
 	{
 		char	   *script;
 
@@ -3862,6 +3868,9 @@ main(int argc, char **argv)
 				benchmarking_option_set = true;
 				internal_script_used = true;
 				break;
+			case 'I':
+				is_no_pkeys++;
+				break;
 			case 'f':
 				weight = parseScriptWeight(optarg, &script);
 				process_file(script, weight);
@@ -4052,7 +4061,7 @@ main(int argc, char **argv)
 			exit(1);
 		}
 
-		init(is_no_vacuum);
+		init(is_no_vacuum, is_no_pkeys);
 		exit(0);
 	}
 	else
