git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 3884ede)
Add psql option:
2006年2月12日 04:04:32 +0000 (04:04 +0000)
2006年2月12日 04:04:32 +0000 (04:04 +0000)
-1 or --single-transaction

Simon Riggs


diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml
index dfd328e2455bdad71eeddb15f339138fc72283d5..21974eb61925a3fd3ea0de8d778ab4c4b6981daa 100644 (file)
--- a/doc/src/sgml/ref/pg_restore.sgml
+++ b/doc/src/sgml/ref/pg_restore.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/ref/pg_restore.sgml,v 1.56 2005年11月01日 21:09:50 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/ref/pg_restore.sgml,v 1.57 2006年02月12日 04:04:32 momjian Exp $ -->
<refentry id="APP-PGRESTORE">
<refmeta>
@@ -448,6 +448,19 @@
</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><option>-1</option></term>
+ <term><option>--single-transaction</option></term>
+ <listitem>
+ <para>
+ Force the restore to execute as a single transaction. Either all
+ SQL statements complete successfully, or no changes are applied. This
+ option also forces --exit-on-error.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</para>
</refsect1>
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index b437bcd87daa4b797e6104b897cc5be06ee217df..52fb8fa141a0299cb37db7abb5463b83e4eac253 100644 (file)
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.158 2006年02月12日 02:54:30 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.159 2006年02月12日 04:04:32 momjian Exp $
PostgreSQL documentation
-->
@@ -463,6 +463,18 @@ PostgreSQL documentation
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>-1</option></term>
+ <term><option>--single-transaction</option></term>
+ <listitem>
+ <para>
+ When psql executes a script with the -f option, this additional option
+ will force the script to execute as a single transaction. Either all
+ SQL statements complete successfully, or no changes are applied.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>-?</></term>
<term><option>--help</></term>
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 41541b1c0b0fc590bce20d98a986be2a155e6129..9faaac22289d7d3858782b1afa70636e4a53f087 100644 (file)
--- a/src/bin/pg_dump/pg_backup.h
+++ b/src/bin/pg_dump/pg_backup.h
@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup.h,v 1.37 2005年10月15日 02:49:38 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup.h,v 1.38 2006年02月12日 04:04:32 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -115,6 +115,8 @@ typedef struct _restoreOptions
int suppressDumpWarnings; /* Suppress output of WARNING entries
* to stderr */
+ bool single_txn;
+
} RestoreOptions;
/*
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 6cb4e60ce5643696bccb1e5fb0660eeb40d01b84..987fd4b2284c8e8a12af5c7ae72ba9965a1512e8 100644 (file)
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.121 2006年02月09日 20:52:13 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.122 2006年02月12日 04:04:32 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -217,6 +217,9 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
AH->stage = STAGE_PROCESSING;
+ if (ropt->single_txn)
+ ahprintf(AH, "BEGIN;\n\n");
+
/*
* Drop the items at the start, in reverse order
*/
@@ -370,6 +373,9 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
}
}
+ if (ropt->single_txn)
+ ahprintf(AH, "COMMIT;\n\n");
+
if (AH->public.verbose)
dumpTimestamp(AH, "Completed on", time(NULL));
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index c40ee7bbec08c151dfacc946a624d0a66ebb7624..0a254220ca1ee25d590ebdc43ce3d1653e60de07 100644 (file)
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -34,7 +34,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.73 2005年10月15日 02:49:39 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.74 2006年02月12日 04:04:32 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -111,6 +111,7 @@ main(int argc, char **argv)
{"use-list", 1, NULL, 'L'},
{"username", 1, NULL, 'U'},
{"verbose", 0, NULL, 'v'},
+ {"single-transaction", 0, NULL, '1'},
/*
* the following options don't have an equivalent short option letter,
@@ -142,7 +143,7 @@ main(int argc, char **argv)
}
}
- while ((c = getopt_long(argc, argv, "acCd:ef:F:h:iI:lL:n:Op:P:RsS:t:T:uU:vWxX:",
+ while ((c = getopt_long(argc, argv, "acCd:ef:F:h:iI:lL:n:Op:P:RsS:t:T:uU:vWxX:1",
cmdopts, NULL)) != -1)
{
switch (c)
@@ -185,9 +186,15 @@ main(int argc, char **argv)
opts->tocFile = strdup(optarg);
break;
+ case 'n': /* Dump data for this schema only */
+ opts->selTypes = 1;
+ opts->schemaNames = strdup(optarg);
+ break;
+
case 'O':
opts->noOwner = 1;
break;
+
case 'p':
if (strlen(optarg) != 0)
opts->pgport = strdup(optarg);
@@ -223,11 +230,6 @@ main(int argc, char **argv)
opts->tableNames = strdup(optarg);
break;
- case 'n': /* Dump data for this schema only */
- opts->selTypes = 1;
- opts->schemaNames = strdup(optarg);
- break;
-
case 'u':
opts->requirePassword = true;
opts->username = simple_prompt("User name: ", 100, true);
@@ -268,6 +270,11 @@ main(int argc, char **argv)
case 0:
break;
+ case '1': /* Restore data in a single transaction */
+ opts->single_txn = true;
+ opts->exit_on_error = true;
+ break;
+
default:
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
exit(1);
@@ -394,6 +401,7 @@ usage(const char *progname)
printf(_(" -X use-set-session-authorization, --use-set-session-authorization\n"
" use SESSION AUTHORIZATION commands instead of\n"
" OWNER TO commands\n"));
+ printf(_(" -1, --single-transaction restore as a single transaction\n"));
printf(_("\nConnection options:\n"));
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 8bd2e14f567c3aa2b7f943d5f80b800b135dc3c6..827702185936d5a51c6b893b2414d810ddef0e18 100644 (file)
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.160 2006年02月12日 03:22:19 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.161 2006年02月12日 04:04:32 momjian Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@@ -563,7 +563,7 @@ exec_command(const char *cmd,
else
{
expand_tilde(&fname);
- success = (process_file(fname) == EXIT_SUCCESS);
+ success = (process_file(fname, false) == EXIT_SUCCESS);
free(fname);
}
}
@@ -1435,11 +1435,12 @@ do_edit(const char *filename_arg, PQExpBuffer query_buf)
* MainLoop() error code.
*/
int
-process_file(char *filename)
+process_file(char *filename, bool single_txn)
{
FILE *fd;
int result;
char *oldfilename;
+ PGresult *res;
if (!filename)
return EXIT_FAILURE;
@@ -1455,7 +1456,13 @@ process_file(char *filename)
oldfilename = pset.inputfile;
pset.inputfile = filename;
+
+ if (single_txn)
+ res = PSQLexec("BEGIN", false);
result = MainLoop(fd);
+ if (single_txn)
+ res = PSQLexec("COMMIT", false);
+
fclose(fd);
pset.inputfile = oldfilename;
return result;
diff --git a/src/bin/psql/command.h b/src/bin/psql/command.h
index 0d969e015b73b9dc67488f67f1a5e8bdd207a177..0cb0e3b64b8974c7dc9ade6d832ac3922d403ee7 100644 (file)
--- a/src/bin/psql/command.h
+++ b/src/bin/psql/command.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/command.h,v 1.23 2005年12月18日 02:17:16 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/command.h,v 1.24 2006年02月12日 04:04:32 momjian Exp $
*/
#ifndef COMMAND_H
#define COMMAND_H
@@ -28,7 +28,7 @@ typedef enum _backslashResult
extern backslashResult HandleSlashCmds(PsqlScanState scan_state,
PQExpBuffer query_buf);
-extern int process_file(char *filename);
+extern int process_file(char *filename, bool single_txn);
extern bool do_pset(const char *param,
const char *value,
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index fb5faca9c3f7c073a264b2f4d0fc39379346b122..0a1ecdb04710cf4366201b3704fb161e717e5268 100644 (file)
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.108 2006年02月12日 02:54:30 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.109 2006年02月12日 04:04:32 momjian Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@@ -93,6 +93,7 @@ usage(void)
printf(_(" -d DBNAME specify database name to connect to (default: \"%s\")\n"), env);
puts(_(" -c COMMAND run only single command (SQL or internal) and exit"));
puts(_(" -f FILENAME execute commands from file, then exit"));
+ puts(_(" -1 (numeral) execute command file as a single transaction"));
puts(_(" -l list available databases, then exit"));
puts(_(" -v NAME=VALUE set psql variable NAME to VALUE"));
puts(_(" -X do not read startup file (~/.psqlrc)"));
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index ee70c7b379af16a9dfade62b5f8e232bbb03b70d..9a9c16f8d3bcf2baeee40937535caaaa85222452 100644 (file)
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.129 2005年12月18日 02:17:16 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.130 2006年02月12日 04:04:32 momjian Exp $
*/
#include "postgres_fe.h"
@@ -76,6 +76,7 @@ struct adhoc_opts
char *action_string;
bool no_readline;
bool no_psqlrc;
+ bool single_txn;
};
static int parse_version(const char *versionString);
@@ -268,7 +269,7 @@ main(int argc, char *argv[])
if (!options.no_psqlrc)
process_psqlrc(argv[0]);
- successResult = process_file(options.action_string);
+ successResult = process_file(options.action_string, options.single_txn);
}
/*
@@ -425,6 +426,7 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
{"list", no_argument, NULL, 'l'},
{"log-file", required_argument, NULL, 'L'},
{"no-readline", no_argument, NULL, 'n'},
+ {"single-transaction", no_argument, NULL, '1'},
{"output", required_argument, NULL, 'o'},
{"port", required_argument, NULL, 'p'},
{"pset", required_argument, NULL, 'P'},
@@ -453,7 +455,7 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
memset(options, 0, sizeof *options);
- while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:HlL:no:p:P:qR:sStT:uU:v:VWxX?",
+ while ((c = getopt_long(argc, argv, "aAc:d:eEf:F:h:HlL:no:p:P:qR:sStT:uU:v:VWxX?1",
long_options, &optindex)) != -1)
{
switch (c)
@@ -606,6 +608,9 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
case 'X':
options->no_psqlrc = true;
break;
+ case '1':
+ options->single_txn = true;
+ break;
case '?':
/* Actual help option given */
if (strcmp(argv[optind - 1], "-?") == 0 || strcmp(argv[optind - 1], "--help") == 0)
@@ -690,9 +695,9 @@ process_psqlrc_file(char *filename)
sprintf(psqlrc, "%s-%s", filename, PG_VERSION);
if (access(psqlrc, R_OK) == 0)
- (void) process_file(psqlrc);
+ (void) process_file(psqlrc, false);
else if (access(filename, R_OK) == 0)
- (void) process_file(filename);
+ (void) process_file(filename, false);
free(psqlrc);
}
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /