pg_upgrade.diff
text/x-diff
Filename: pg_upgrade.diff
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| contrib/pg_upgrade/check.c | 0 | 0 |
| contrib/pg_upgrade/controldata.c | 0 | 0 |
| contrib/pg_upgrade/pg_upgrade.c | 0 | 0 |
| contrib/pg_upgrade/pg_upgrade.h | 0 | 0 |
| doc/src/sgml/pgupgrade.sgml | 0 | 0 |
diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
new file mode 100644
index 891eb9a..a5f63eb
*** a/contrib/pg_upgrade/check.c
--- b/contrib/pg_upgrade/check.c
*************** report_clusters_compatible(void)
*** 148,156 ****
}
pg_log(PG_REPORT, "\n"
! "If pg_upgrade fails after this point, you must re-initdb the new cluster\n"
! "before continuing. You will also need to remove the \".old\" suffix from\n"
! "%s/global/pg_control.old.\n", old_cluster.pgdata);
}
--- 148,155 ----
}
pg_log(PG_REPORT, "\n"
! "If pg_upgrade fails after this point, you must re-initdb the\n"
! "new cluster before continuing.\n");
}
*************** output_completion_banner(char *deletion_
*** 198,205 ****
/* Did we copy the free space files? */
if (GET_MAJOR_VERSION(old_cluster.major_version) >= 804)
pg_log(PG_REPORT,
! "Optimizer statistics are not transferred by pg_upgrade so consider\n"
! "running:\n"
" vacuumdb --all --analyze-only\n"
"on the newly-upgraded cluster.\n\n");
else
--- 197,204 ----
/* Did we copy the free space files? */
if (GET_MAJOR_VERSION(old_cluster.major_version) >= 804)
pg_log(PG_REPORT,
! "Optimizer statistics are not transferred by pg_upgrade so\n"
! "consider running:\n"
" vacuumdb --all --analyze-only\n"
"on the newly-upgraded cluster.\n\n");
else
diff --git a/contrib/pg_upgrade/controldata.c b/contrib/pg_upgrade/controldata.c
new file mode 100644
index 8560d88..5239601
*** a/contrib/pg_upgrade/controldata.c
--- b/contrib/pg_upgrade/controldata.c
*************** check_control_data(ControlData *oldctrl,
*** 516,526 ****
void
! rename_old_pg_control(void)
{
char old_path[MAXPGPATH],
new_path[MAXPGPATH];
prep_status("Adding \".old\" suffix to old global/pg_control");
snprintf(old_path, sizeof(old_path), "%s/global/pg_control", old_cluster.pgdata);
--- 516,527 ----
void
! disable_old_cluster(void)
{
char old_path[MAXPGPATH],
new_path[MAXPGPATH];
+ /* rename pg_control so old server cannot be accidentally started */
prep_status("Adding \".old\" suffix to old global/pg_control");
snprintf(old_path, sizeof(old_path), "%s/global/pg_control", old_cluster.pgdata);
*************** rename_old_pg_control(void)
*** 528,531 ****
--- 529,538 ----
if (pg_mv_file(old_path, new_path) != 0)
pg_log(PG_FATAL, "Unable to rename %s to %s.\n", old_path, new_path);
check_ok();
+
+ pg_log(PG_REPORT, "\n"
+ "If you want to start the old cluster, you will need to remove\n"
+ "the \".old\" suffix from %s/global/pg_control.old.\n"
+ "Because \"link\" mode was used, the old cluster cannot be safely\n"
+ "started once the new cluster has been started.\n\n", old_cluster.pgdata);
}
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
new file mode 100644
index 15b30fc..3078bcd
*** a/contrib/pg_upgrade/pg_upgrade.c
--- b/contrib/pg_upgrade/pg_upgrade.c
***************
*** 43,49 ****
#include <langinfo.h>
#endif
- static void disable_old_cluster(void);
static void prepare_new_cluster(void);
static void prepare_new_databases(void);
static void create_new_objects(void);
--- 43,48 ----
*************** main(int argc, char **argv)
*** 87,93 ****
pg_log(PG_REPORT, "\nPerforming Upgrade\n");
pg_log(PG_REPORT, "------------------\n");
- disable_old_cluster();
prepare_new_cluster();
stop_postmaster(false);
--- 86,91 ----
*************** main(int argc, char **argv)
*** 109,114 ****
--- 107,122 ----
stop_postmaster(false);
+ /*
+ * Most failures happen in create_new_objects(), which has
+ * completed at this point. We do this here because it is just
+ * before linking, which will link the old and new cluster data
+ * files, preventing the old cluster from being safely started
+ * once the new cluster is started.
+ */
+ if (user_opts.transfer_mode == TRANSFER_MODE_LINK)
+ disable_old_cluster();
+
transfer_all_new_dbs(&old_cluster.dbarr, &new_cluster.dbarr,
old_cluster.pgdata, new_cluster.pgdata);
*************** setup(char *argv0, bool live_check)
*** 176,189 ****
}
- static void
- disable_old_cluster(void)
- {
- /* rename pg_control so old server cannot be accidentally started */
- rename_old_pg_control();
- }
-
-
static void
prepare_new_cluster(void)
{
--- 184,189 ----
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
new file mode 100644
index 58d5201..a954815
*** a/contrib/pg_upgrade/pg_upgrade.h
--- b/contrib/pg_upgrade/pg_upgrade.h
*************** void create_script_for_old_cluster_dele
*** 282,289 ****
/* controldata.c */
void get_control_data(ClusterInfo *cluster, bool live_check);
! void check_control_data(ControlData *oldctrl,
! ControlData *newctrl);
/* dump.c */
--- 282,289 ----
/* controldata.c */
void get_control_data(ClusterInfo *cluster, bool live_check);
! void check_control_data(ControlData *oldctrl, ControlData *newctrl);
! void disable_old_cluster(void);
/* dump.c */
*************** int exec_prog(bool throw_error, const ch
*** 298,304 ****
__attribute__((format(PG_PRINTF_ATTRIBUTE, 2, 3)));
void verify_directories(void);
bool is_server_running(const char *datadir);
- void rename_old_pg_control(void);
/* file.c */
--- 298,303 ----
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
new file mode 100644
index 1373069..4f263fe
*** a/doc/src/sgml/pgupgrade.sgml
--- b/doc/src/sgml/pgupgrade.sgml
***************
*** 182,188 ****
<para>
If you are using a version-specific installation directory, e.g.
! <filename>/opt/PostgreSQL/8.4</>, you do not need to move the old cluster. The
one-click installers all use version-specific installation directories.
</para>
--- 182,188 ----
<para>
If you are using a version-specific installation directory, e.g.
! <filename>/opt/PostgreSQL/9.1</>, you do not need to move the old cluster. The
one-click installers all use version-specific installation directories.
</para>
*************** gmake prefix=/usr/local/pgsql.new instal
*** 254,260 ****
<para>
Install any custom shared object files (or DLLs) used by the old cluster
! into the new cluster, e.g. <filename>pgcrypto.so</filename>, whether they are from <filename>contrib</filename>
or some other source. Do not install the schema definitions, e.g.
<filename>pgcrypto.sql</>, because these will be upgraded from the old cluster.
</para>
--- 254,261 ----
<para>
Install any custom shared object files (or DLLs) used by the old cluster
! into the new cluster, e.g. <filename>pgcrypto.so</filename>,
! whether they are from <filename>contrib</filename>
or some other source. Do not install the schema definitions, e.g.
<filename>pgcrypto.sql</>, because these will be upgraded from the old cluster.
</para>
*************** psql --username postgres --file script.s
*** 454,471 ****
<listitem>
<para>
! If you
! ran <command>pg_upgrade</command> <emphasis>without</> <option>--link</>
! or did not start the new server, the old cluster was not
! modified except that an <literal>.old</> suffix was appended
! to <filename>$PGDATA/global/pg_control</> and perhaps
! tablespace directories. To reuse the old cluster, remove
! the <filename>.old</> suffix
! from <filename>$PGDATA/global/pg_control</>. and, if upgrading
! to 8.4 or earlier, remove the tablespace directories created
! by the upgrade and remove the <filename>.old</> suffix from
! the tablespace directory names; then you can restart the old
! cluster.
</para>
</listitem>
</itemizedlist>
--- 455,468 ----
<listitem>
<para>
! If you ran <command>pg_upgrade</command> <emphasis>without</>
! <option>--link</> or did not start the new server, the
! old cluster was not modified except that, if linking
! started, a <literal>.old</> suffix was appended to
! <filename>$PGDATA/global/pg_control</>. To reuse the old
! cluster, possibly remove the <filename>.old</> suffix from
! <filename>$PGDATA/global/pg_control</>; you can then restart the
! old cluster.
</para>
</listitem>
</itemizedlist>
*************** psql --username postgres --file script.s
*** 582,590 ****
</para>
<para>
! If you want to use link mode and you don't want your old cluster
to be modified when the new cluster is started, make a copy of the
! old cluster and upgrade that with link mode. To make a valid copy
of the old cluster, use <command>rsync</> to create a dirty
copy of the old cluster while the server is running, then shut down
the old server and run <command>rsync</> again to update the copy with any
--- 579,587 ----
</para>
<para>
! If you want to use link mode and you do not want your old cluster
to be modified when the new cluster is started, make a copy of the
! old cluster and upgrade that in link mode. To make a valid copy
of the old cluster, use <command>rsync</> to create a dirty
copy of the old cluster while the server is running, then shut down
the old server and run <command>rsync</> again to update the copy with any