diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index 4aa8a50..f2aa09b 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -140,6 +140,10 @@ int64              throttle_delay = 0;
 char      *tablespace = NULL;
 char      *index_tablespace = NULL;
 
+/* */
+bool      use_if_exists = TRUE;
+bool      skip_cleanup  = FALSE;
+
 /*
  * end of configurable parameters
  *********************************************************************/
@@ -344,6 +348,8 @@ usage(void)
                   "  %s [OPTION]... [DBNAME]\n"
                   "\nInitialization options:\n"
                   "  -i, --initialize         invokes initialization mode\n"
+                  "  -X, --no-if-exists       don't use IF EXISTS\n"
+                   "  -Q  --skip-cleanup       don't do DROP TABLE\n"
                   "  -F, --fillfactor=NUM     set fill factor\n"
                "  -n, --no-vacuum          do not run VACUUM after initialization\n"
        "  -q, --quiet              quiet logging (one message each 5 seconds)\n"
@@ -1586,19 +1592,19 @@ init(bool is_no_vacuum)
                        "pgbench_tellers",
                        "tid int not null,bid int,tbalance int,filler char(84)",
                        "tid int not null,bid int,tbalance int,filler char(84)",
-                       1
+                       0
                },
                {
                        "pgbench_accounts",
                        "aid    int not null,bid int,abalance int,filler char(84)",
                        "aid bigint not null,bid int,abalance int,filler char(84)",
-                       1
+                       0
                },
                {
                        "pgbench_branches",
                        "bid int not null,bbalance int,filler char(88)",
                        "bid int not null,bbalance int,filler char(88)",
-                       1
+                       0
                }
        };
        static const char *const DDLINDEXes[] = {
@@ -1638,8 +1644,15 @@ init(bool is_no_vacuum)
                const char *cols;
 
                /* Remove old table, if it exists. */
-               snprintf(buffer, sizeof(buffer), "drop table if exists %s", ddl->table);
-               executeStatement(con, buffer);
+               if (!skip_cleanup)
+               {
+                       if (use_if_exists)
+                               snprintf(buffer, sizeof(buffer), "drop table if exists %s", ddl->table);
+                       else
+                               snprintf(buffer, sizeof(buffer), "drop table %s", ddl->table);
+
+                       executeStatement(con, buffer);
+               }
 
                /* Construct new create table statement. */
                opts[0] = '\0';
@@ -2408,7 +2421,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:dqSNc:j:Crs:t:T:U:lf:D:F:M:P:R:", long_options, &optindex)) != -1)
+       while ((c = getopt_long(argc, argv, "ih:nvp:dqSNc:j:Crs:t:T:U:lf:D:F:M:P:R:X:Q", long_options, &optindex)) != -1)
        {
                switch (c)
                {
@@ -2617,6 +2630,15 @@ main(int argc, char **argv)
                                }
 #endif
                                break;
+
+                       case 'X':
+                               use_if_exists = FALSE;
+                               break;
+
+                       case 'Q':
+                               skip_cleanup = TRUE;
+                               break;
+
                        default:
                                fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
                                exit(1);