diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
index 3fb29f8c1d4..1eee8dc5742 100644
--- a/doc/src/sgml/ref/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -809,7 +809,8 @@ pgbench options> dbname>
Script file meta commands begin with a backslash (\>) and
- extend to the end of the line.
+ normally extend to the end of the line, although they can be continued
+ to additional lines by writing backslash-return.
Arguments to a meta command are separated by white space.
These meta commands are supported:
@@ -838,7 +839,8 @@ pgbench options> dbname>
Examples:
\set ntellers 10 * :scale
-\set aid (1021 * random(1, 100000 * :scale)) % (100000 * :scale) + 1
+\set aid (1021 * random(1, 100000 * :scale)) % \
+ (100000 * :scale) + 1
diff --git a/src/bin/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l
index 9a3be3d667f..dc1367bbdbc 100644
--- a/src/bin/pgbench/exprscan.l
+++ b/src/bin/pgbench/exprscan.l
@@ -66,6 +66,9 @@ space [ \t\r\f\v]
nonspace [^ \t\r\f\v\n]
newline [\n]
+/* Line continuation marker */
+continuation \\{newline}
+
/* Exclusive states */
%x EXPR
@@ -96,8 +99,20 @@ newline [\n]
return 1;
}
+ /*
+ * We need this rule to avoid returning "word\" instead of recognizing
+ * a continuation marker just after a word:
+ */
+{nonspace}+{continuation} {
+ /* Found "word\\\n", emit and return just "word" */
+ psqlscan_emit(cur_state, yytext, yyleng - 2);
+ return 1;
+ }
+
{space}+ { /* ignore */ }
+{continuation} { /* ignore */ }
+
{newline} {
/* report end of command */
last_was_newline = true;
@@ -138,14 +153,16 @@ newline [\n]
return FUNCTION;
}
+{space}+ { /* ignore */ }
+
+{continuation} { /* ignore */ }
+
{newline} {
/* report end of command */
last_was_newline = true;
return 0;
}
-{space}+ { /* ignore */ }
-
. {
/*
* must strdup yytext so that expr_yyerror_more doesn't