aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/pgbench/pgbench.c51
-rw-r--r--doc/src/sgml/pgbench.sgml9
2 files changed, 46 insertions, 14 deletions
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index bb18c8907dc..dcae03e9996 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -33,6 +33,7 @@
#include "postgres_fe.h"
+#include "getopt_long.h"
#include "libpq-fe.h"
#include "libpq/pqsignal.h"
#include "portability/instr_time.h"
@@ -44,10 +45,6 @@
#include <unistd.h>
#endif /* ! WIN32 */
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
@@ -123,6 +120,11 @@ int scale = 1;
int fillfactor = 100;
/*
+ * use unlogged tables?
+ */
+int unlogged_tables = 0;
+
+/*
* end of configurable parameters
*********************************************************************/
@@ -357,6 +359,8 @@ usage(const char *progname)
" -h HOSTNAME database server host or socket directory\n"
" -p PORT database server port number\n"
" -U USERNAME connect as specified database user\n"
+ " --unlogged-tables\n"
+ " create tables as unlogged tables\n"
" --help show this help, then exit\n"
" --version output version information, then exit\n"
"\n"
@@ -1259,21 +1263,31 @@ init(void)
for (i = 0; i < lengthof(DDLs); i++)
{
+ char buffer1[128];
+ char buffer2[128];
+ char *qry = DDLs[i];
+
/*
* set fillfactor for branches, tellers and accounts tables
*/
- if ((strstr(DDLs[i], "create table pgbench_branches") == DDLs[i]) ||
- (strstr(DDLs[i], "create table pgbench_tellers") == DDLs[i]) ||
- (strstr(DDLs[i], "create table pgbench_accounts") == DDLs[i]))
+ if ((strstr(qry, "create table pgbench_branches") == DDLs[i]) ||
+ (strstr(qry, "create table pgbench_tellers") == DDLs[i]) ||
+ (strstr(qry, "create table pgbench_accounts") == DDLs[i]))
{
- char ddl_stmt[128];
+ snprintf(buffer1, 128, qry, fillfactor);
+ qry = buffer1;
+ }
- snprintf(ddl_stmt, 128, DDLs[i], fillfactor);
- executeStatement(con, ddl_stmt);
- continue;
+ /*
+ * set unlogged tables, if requested
+ */
+ if (unlogged_tables && strncmp(qry, "create table", 12) == 0)
+ {
+ snprintf(buffer2, 128, "create unlogged%s", qry + 6);
+ qry = buffer2;
}
- else
- executeStatement(con, DDLs[i]);
+
+ executeStatement(con, qry);
}
executeStatement(con, "begin");
@@ -1767,6 +1781,7 @@ main(int argc, char **argv)
int do_vacuum_accounts = 0; /* do vacuum accounts before testing? */
int ttype = 0; /* transaction type. 0: TPC-B, 1: SELECT only,
* 2: skip update of branches and tellers */
+ int optindex;
char *filename = NULL;
bool scale_given = false;
@@ -1780,6 +1795,11 @@ main(int argc, char **argv)
int i;
+ static struct option long_options[] = {
+ {"unlogged-tables", no_argument, &unlogged_tables, 1},
+ {NULL, 0, NULL, 0}
+ };
+
#ifdef HAVE_GETRLIMIT
struct rlimit rlim;
#endif
@@ -1823,7 +1843,7 @@ main(int argc, char **argv)
state = (CState *) xmalloc(sizeof(CState));
memset(state, 0, sizeof(CState));
- while ((c = getopt(argc, argv, "ih:nvp:dSNc:j:Crs:t:T:U:lf:D:F:M:")) != -1)
+ while ((c = getopt_long(argc, argv, "ih:nvp:dSNc:j:Crs:t:T:U:lf:D:F:M:", long_options, &optindex)) != -1)
{
switch (c)
{
@@ -1975,6 +1995,9 @@ main(int argc, char **argv)
exit(1);
}
break;
+ case 0:
+ /* This covers the long options. */
+ break;
default:
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
diff --git a/doc/src/sgml/pgbench.sgml b/doc/src/sgml/pgbench.sgml
index e7b78605ecf..c1e5c9c7b6f 100644
--- a/doc/src/sgml/pgbench.sgml
+++ b/doc/src/sgml/pgbench.sgml
@@ -159,6 +159,15 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--unlogged-tables</option></term>
+ <listitem>
+ <para>
+ Create all tables as unlogged tables, rather than permanent tables.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</para>