aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/command.c8
-rw-r--r--src/bin/psql/help.c2
-rw-r--r--src/bin/psql/startup.c27
3 files changed, 29 insertions, 8 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 8abadb26c49..6ead800aeb1 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -2043,9 +2043,11 @@ process_file(char *filename, bool single_txn, bool use_relative_path)
PGresult *res;
if (!filename)
- return EXIT_FAILURE;
-
- if (strcmp(filename, "-") != 0)
+ {
+ fd = stdin;
+ filename = NULL;
+ }
+ else if (strcmp(filename, "-") != 0)
{
canonicalize_path(filename);
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 3ebf7cc5262..8793201570d 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -97,7 +97,7 @@ usage(void)
printf(_(" -V, --version output version information, then exit\n"));
printf(_(" -X, --no-psqlrc do not read startup file (~/.psqlrc)\n"));
printf(_(" -1 (\"one\"), --single-transaction\n"
- " execute command file as a single transaction\n"));
+ " execute as a single transaction (if non-interactive)\n"));
printf(_(" -?, --help show this help, then exit\n"));
printf(_("\nInput and output options:\n"));
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 9a6306b8cf2..8ba8f704218 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -150,6 +150,27 @@ main(int argc, char *argv[])
parse_psql_options(argc, argv, &options);
+ /*
+ * If no action was specified and we're in non-interactive mode, treat
+ * it as if the user had specified "-f -". This lets single-transaction
+ * mode work in this case.
+ */
+ if (options.action == ACT_NOTHING && pset.notty)
+ {
+ options.action = ACT_FILE;
+ options.action_string = NULL;
+ }
+
+ /* Bail out if -1 was specified but will be ignored. */
+ if (options.single_txn && options.action != ACT_FILE)
+ {
+ if (options.action == ACT_NOTHING)
+ fprintf(stderr,_("%s: -1 can only be used in non-interactive mode\n"), pset.progname);
+ else
+ fprintf(stderr,_("%s: -1 is incompatible with -c and -l\n"), pset.progname);
+ exit(EXIT_FAILURE);
+ }
+
if (!pset.popt.topt.fieldSep.separator &&
!pset.popt.topt.fieldSep.separator_zero)
{
@@ -309,11 +330,9 @@ main(int argc, char *argv[])
process_psqlrc(argv[0]);
connection_warnings(true);
- if (!pset.quiet && !pset.notty)
+ if (!pset.quiet)
printf(_("Type \"help\" for help.\n\n"));
- if (!pset.notty)
- initializeInput(options.no_readline ? 0 : 1);
-
+ initializeInput(options.no_readline ? 0 : 1);
successResult = MainLoop(stdin);
}