- When
psql executes a script
with the
-
- BEGIN>/COMMIT> around the script to execute it
- as a single transaction. This ensures that either all the commands
- complete successfully, or no changes are applied.
+ When
psql executes a script
, adding
+ this option wraps BEGIN>/COMMIT> around the
+ script to execute it as a single transaction. This ensures that
+ either all the commands complete successfully, or no changes are
+ applied.
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"));
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)
{
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);
}