]> granicus.if.org Git - postgresql/blobdiff - contrib/pg_upgrade/option.c
Update copyright for 2014
[postgresql] / contrib / pg_upgrade / option.c
index c71db32ed1c9a68e60aae74eb8700c82165fc493..79b59ee17d25f7a3fd2d77b19d1d8374f681e036 100644 (file)
@@ -3,7 +3,7 @@
  *
  *     options functions
  *
- *     Copyright (c) 2010-2013, PostgreSQL Global Development Group
+ *     Copyright (c) 2010-2014, PostgreSQL Global Development Group
  *     contrib/pg_upgrade/option.c
  */
 
@@ -25,6 +25,7 @@
 static void usage(void);
 static void check_required_directory(char **dirpath, char **configpath,
                                   char *envVarName, char *cmdLineOption, char *description);
+#define FIX_DEFAULT_READ_ONLY "-c default_transaction_read_only=false"
 
 
 UserOpts       user_opts;
@@ -82,8 +83,7 @@ parseCommandLine(int argc, char *argv[])
 
        if (argc > 1)
        {
-               if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ||
-                       strcmp(argv[1], "-?") == 0)
+               if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0)
                {
                        usage();
                        exit(0);
@@ -97,10 +97,10 @@ parseCommandLine(int argc, char *argv[])
 
        /* Allow help and version to be run as root, so do the test here. */
        if (os_user_effective_id == 0)
-               pg_log(PG_FATAL, "%s: cannot be run as root\n", os_info.progname);
+               pg_fatal("%s: cannot be run as root\n", os_info.progname);
 
        if ((log_opts.internal = fopen_priv(INTERNAL_LOG_FILE, "a")) == NULL)
-               pg_log(PG_FATAL, "cannot write to log file %s\n", INTERNAL_LOG_FILE);
+               pg_fatal("cannot write to log file %s\n", INTERNAL_LOG_FILE);
 
        while ((option = getopt_long(argc, argv, "d:D:b:B:cj:ko:O:p:P:rU:v",
                                                                 long_options, &optindex)) != -1)
@@ -153,7 +153,7 @@ parseCommandLine(int argc, char *argv[])
                        case 'p':
                                if ((old_cluster.port = atoi(optarg)) <= 0)
                                {
-                                       pg_log(PG_FATAL, "invalid old port number\n");
+                                       pg_fatal("invalid old port number\n");
                                        exit(1);
                                }
                                break;
@@ -161,7 +161,7 @@ parseCommandLine(int argc, char *argv[])
                        case 'P':
                                if ((new_cluster.port = atoi(optarg)) <= 0)
                                {
-                                       pg_log(PG_FATAL, "invalid new port number\n");
+                                       pg_fatal("invalid new port number\n");
                                        exit(1);
                                }
                                break;
@@ -173,6 +173,7 @@ parseCommandLine(int argc, char *argv[])
                        case 'U':
                                pg_free(os_info.user);
                                os_info.user = pg_strdup(optarg);
+                               os_info.user_specified = true;
 
                                /*
                                 * Push the user name into the environment so pre-9.1
@@ -187,8 +188,7 @@ parseCommandLine(int argc, char *argv[])
                                break;
 
                        default:
-                               pg_log(PG_FATAL,
-                                          "Try \"%s --help\" for more information.\n",
+                               pg_fatal("Try \"%s --help\" for more information.\n",
                                           os_info.progname);
                                break;
                }
@@ -198,7 +198,7 @@ parseCommandLine(int argc, char *argv[])
        for (filename = output_files; *filename != NULL; filename++)
        {
                if ((fp = fopen_priv(*filename, "a")) == NULL)
-                       pg_log(PG_FATAL, "cannot write to log file %s\n", *filename);
+                       pg_fatal("cannot write to log file %s\n", *filename);
 
                /* Start with newline because we might be appending to a file. */
                fprintf(fp, "\n"
@@ -209,6 +209,17 @@ parseCommandLine(int argc, char *argv[])
                fclose(fp);
        }
 
+       /* Turn off read-only mode;  add prefix to PGOPTIONS? */
+       if (getenv("PGOPTIONS"))
+       {
+               char *pgoptions = psprintf("%s %s", FIX_DEFAULT_READ_ONLY,
+                                                                       getenv("PGOPTIONS"));
+               pg_putenv("PGOPTIONS", pgoptions);
+               pfree(pgoptions);
+       }
+       else
+               pg_putenv("PGOPTIONS", FIX_DEFAULT_READ_ONLY);
+
        /* Get values from env if not already set */
        check_required_directory(&old_cluster.bindir, NULL, "PGBINOLD", "-b",
                                                         "old cluster binaries reside");
@@ -244,7 +255,7 @@ Options:\n\
   -U, --username=NAME           cluster superuser (default \"%s\")\n\
   -v, --verbose                 enable verbose internal logging\n\
   -V, --version                 display version information, then exit\n\
-  -?, -h, --help                show this help, then exit\n\
+  -?, --help                    show this help, then exit\n\
 \n\
 Before running pg_upgrade you must:\n\
   create a new database cluster (using the new version of initdb)\n\
@@ -308,7 +319,7 @@ check_required_directory(char **dirpath, char **configpath,
                                *configpath = pg_strdup(envVar);
                }
                else
-                       pg_log(PG_FATAL, "You must identify the directory where the %s.\n"
+                       pg_fatal("You must identify the directory where the %s.\n"
                                   "Please use the %s command-line option or the %s environment variable.\n",
                                   description, cmdLineOption, envVarName);
        }
@@ -371,7 +382,7 @@ adjust_data_dir(ClusterInfo *cluster)
 
        if ((output = popen(cmd, "r")) == NULL ||
                fgets(cmd_output, sizeof(cmd_output), output) == NULL)
-               pg_log(PG_FATAL, "Could not get data directory using %s: %s\n",
+               pg_fatal("Could not get data directory using %s: %s\n",
                           cmd, getErrorText(errno));
 
        pclose(output);
@@ -410,7 +421,7 @@ get_sock_dir(ClusterInfo *cluster, bool live_check)
                        /* Use the current directory for the socket */
                        cluster->sockdir = pg_malloc(MAXPGPATH);
                        if (!getcwd(cluster->sockdir, MAXPGPATH))
-                               pg_log(PG_FATAL, "cannot find current directory\n");
+                               pg_fatal("cannot find current directory\n");
                }
                else
                {
@@ -428,14 +439,14 @@ get_sock_dir(ClusterInfo *cluster, bool live_check)
                        snprintf(filename, sizeof(filename), "%s/postmaster.pid",
                                         cluster->pgdata);
                        if ((fp = fopen(filename, "r")) == NULL)
-                               pg_log(PG_FATAL, "Cannot open file %s: %m\n", filename);
+                               pg_fatal("Cannot open file %s: %m\n", filename);
 
                        for (lineno = 1;
                           lineno <= Max(LOCK_FILE_LINE_PORT, LOCK_FILE_LINE_SOCKET_DIR);
                                 lineno++)
                        {
                                if (fgets(line, sizeof(line), fp) == NULL)
-                                       pg_log(PG_FATAL, "Cannot read line %d from %s: %m\n", lineno, filename);
+                                       pg_fatal("Cannot read line %d from %s: %m\n", lineno, filename);
 
                                /* potentially overwrite user-supplied value */
                                if (lineno == LOCK_FILE_LINE_PORT)