Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
postgres-lambda-diff
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jakob Huber
postgres-lambda-diff
Commits
5461983d
Commit
5461983d
authored
23 years ago
by
Bruce Momjian
Browse files
Options
Downloads
Patches
Plain Diff
Update with new features. Still disabled.
parent
9facc585
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
doc/src/sgml/ref/pg_upgrade.sgml
+4
-4
4 additions, 4 deletions
doc/src/sgml/ref/pg_upgrade.sgml
src/bin/pg_dump/pg_upgrade
+92
-58
92 additions, 58 deletions
src/bin/pg_dump/pg_upgrade
with
96 additions
and
62 deletions
doc/src/sgml/ref/pg_upgrade.sgml
+
4
−
4
View file @
5461983d
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_upgrade.sgml,v 1.1
3
200
1/12/08 03:24:38 thomas
Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_upgrade.sgml,v 1.1
4
200
2/01/09 21:50:51 momjian
Exp $
PostgreSQL documentation
-->
...
...
@@ -24,7 +24,7 @@ PostgreSQL documentation
<date>1999-07-31</date>
</refsynopsisdivinfo>
<synopsis>
pg_upgrade [ -
f
<replaceable class="parameter">filename</replaceable> ] <replaceable class="parameter">old_data_dir</replaceable>
pg_upgrade
-s <replaceable class="parameter">filename</replaceable>
[ -
d
<replaceable class="parameter">filename</replaceable> ] <replaceable class="parameter">old_data_dir</replaceable>
</synopsis>
</refsynopsisdiv>
...
...
@@ -58,7 +58,7 @@ pg_upgrade [ -f <replaceable class="parameter">filename</replaceable> ] <replace
<para>
Then do:
<programlisting>
$ pg_dumpall -s >
db
.out
$ pg_dumpall -s >
schema
.out
</programlisting>
to dump out your old database's table definitions without any data.
</para>
...
...
@@ -108,7 +108,7 @@ $ make install
Change your working directory to the
pgsql main directory, and type:
<programlisting>
$ pg_upgrade -
f db
.out data.old
$ pg_upgrade -
s schema.out -d data
.out data.old
</programlisting>
The program will do some checking to make sure everything is properly
configured, and will run your db.out script to recreate all the databases
...
...
This diff is collapsed.
Click to expand it.
src/bin/pg_dump/pg_upgrade
+
92
−
58
View file @
5461983d
...
...
@@ -3,7 +3,7 @@
# pg_upgrade: update a database without needing a full dump/reload cycle.
# CAUTION: read the manual page before trying to use this!
# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_upgrade,v 1.
19
2002/01/09
16:08
:5
4
momjian Exp $
# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_upgrade,v 1.
20
2002/01/09
21:50
:5
2
momjian Exp $
#
# NOTE: we must be sure to update the version-checking code a few dozen lines
# below for each new PostgreSQL release.
...
...
@@ -12,24 +12,31 @@ TMPFILE="/tmp/pgupgrade.$$"
trap
"rm -f
$TMPFILE
"
0 1 2 3 15
if
[
"$#"
-eq
0
]
then
echo
"Usage:
$0
-f inputfile old_data_dir"
1>&2
exit
1
fi
if
[
"X
$1
"
=
"X-f"
]
then
INPUT
=
"
$2
"
shift
2
if
[
!
-f
"
$INPUT
"
]
then
echo
"
$INPUT
does not exist"
1>&2
SCHEMA
=
""
DATA
=
""
while
[
"$#"
-gt
1
]
do
if
[
"X
$1
"
=
"X-s"
]
then
SCHEMA
=
"
$2
"
if
[
!
-s
"
$SCHEMA
"
]
then
echo
"
$SCHEMA
does not exist"
1>&2
exit
1
fi
shift
2
elif
[
"X
$1
"
=
"X-d"
]
then
DATA
=
"
$2
"
if
[
!
-s
"
$DATA
"
]
then
echo
"
$DATA
does not exist"
1>&2
exit
1
fi
shift
2
else
echo
"Usage:
$0
-s schema_dump [ -d data_dump ] old_data_dir"
1>&2
exit
1
fi
else
echo
"Usage:
$0
-f inputfile old_data_dir"
1>&2
exit
1
fi
done
if
[
"$#"
-ne
1
]
then
echo
"Usage:
$0
-
f inputfile
old_data_dir"
1>&2
if
[
"$#"
-ne
1
-o
!
"
$SCHEMA
"
]
then
echo
"Usage:
$0
-
s schema_dump [ -d data_dump ]
old_data_dir"
1>&2
exit
1
fi
...
...
@@ -38,8 +45,7 @@ OLDDIR="$1"
# check things
if
[
!
-d
"./data"
]
then
echo
"
`
basename
$0
`
must be run from the directory containing
the database directory
\`
data
\'
(
`
dirname
$PGDATA
`
.)"
1>&2
then
echo
"
`
basename
$0
`
must be run from the directory containing the database directory
\`
data
\'
(
`
dirname
$PGDATA
`
.)"
1>&2
echo
"You must have run initdb to create the template1 database."
1>&2
exit
1
fi
...
...
@@ -80,6 +86,12 @@ SRCVERSION=`cat ./$OLDDIR/PG_VERSION`
# MYVERSION is the expected output database version
MYVERSION
=
"7.1"
if
[
"
$SRCVERSION
"
=
"7.1"
-a
!
"
$DATA
"
]
then
echo
"
$0
requires a full data dump file to upgrade from version
$SRCVERSION
."
1>&2
echo
"Use the '-d' parameter to specify the dump file"
1>&2
exit
1
fi
if
[
"
$DESTVERSION
"
!=
"
$MYVERSION
"
-a
"
$DESTVERSION
"
!=
"
$SRCVERSION
"
]
then
echo
"
$0
is for PostgreSQL version
$MYVERSION
, but ./data/PG_VERSION contains
$DESTVERSION
."
1>&2
echo
"Did you run initdb for version
$MYVERSION
?"
1>&2
...
...
@@ -103,56 +115,65 @@ esac
# OK, ready to proceed.
# Execute the input script to create everything, except that we remove
# any COPY statements, except for the ones that load pg_shadow/pg_group.
# There shouldn't be any others in there anyway...
cat
$INPUT
|
awk
' {
if (tolower($1) == "copy" &&
$2 != "pg_shadow" &&
$2 != "pg_group")
while (getline $0 > 0 && $0 != "\\.")
;
# Execute the schema script to create everything, except modify any
# sequences with int4 maximums if we are upgrading from 7.1.
cat
$SCHEMA
|
awk
-F
' '
'{
if ("'
"
$SRCVERSION
"
'" == "7.1" &&
$1 == "CREATE" &&
$2 == "SEQUENCE" &&
($9 >= 2147483646 && # handle OS round
($9 <= 2147483648))
{
for(i=1; i < NF; i++)
if (i != 9)
printf "%s ", $i;
else
printf "%s ", "9223372036854775807";
print;
}
else print $0;
}'
>
$TMPFILE
psql
"template1"
<
$TMPFILE
}'
|
psql
"template1"
if
[
$?
-ne
0
]
then
echo
"There were errors in the input script
$
INPUT
.
then
echo
"There were errors in the input script
$
SCHEMA
.
$0
aborted."
1>&2
exit
1
fi
echo
"Input script
$INPUT
complete, fixing row commit statuses..."
# Now vacuum each result database to mark all system-table rows as committed,
# because when pg_clog is replaced with the saved version, the transaction
# statuses will no longer match the data. VACUUM will force the on-row
# status flags to the right value so that pg_clog will not matter anymore.
# Note: we used to try to do this as part of the previous step, but that
# risks permissions problems if VACUUM is run as the wrong user.
# Note: the initial VACUUM does template1, then we do everything else.
cat
$INPUT
|
awk
'BEGIN { print "VACUUM;" }
{
if (tolower($1) == "copy")
while (getline $0 > 0 && $0 != "\\.")
;
else if (tolower($1) == "\\connect" &&
$2 != "-" &&
$2 != "template1")
printf "\\connect %s\nVACUUM;\n", $2;
}'
>
$TMPFILE
psql
"template1"
<
$TMPFILE
if
[
"
$SRCVERSION
"
!=
"7.1"
]
then
echo
"Input script
$SCHEMA
complete, fixing row commit statuses..."
else
echo
"Input script
$SCHEMA
complete, setting int8 sequences..."
# Set all the sequence counters because they are not brought over
# in the schema dump, and the old 7.1 sequences where int4 in size
# so bringing over the file wouldn't help us anyway.
cat
$DATA
|
awk
'$0 == "\\connect " || "SELECT setval (" \
{print $0;}'
|
psql
"template1"
if
[
$?
-ne
0
]
then
echo
"There were errors in the
vacuuming step
.
then
echo
"There were errors in the
input script
$SCHEMA
.
$0
aborted."
1>&2
exit
1
fi
echo
"Int8 sequences set, fixing row commit statuses..."
fi
# Now vacuum each result database in case our transaction increase
# causes all the XID's to be marked with the frozen XID.
psql
-l
|
while
read
DB
do
echo
"VACUUM;"
| psql
"
$DB
"
if
[
$?
-ne
0
]
then
echo
"There were errors during VACUUM.
$0
aborted."
1>&2
exit
1
fi
done
# should be pretty small file
pg_dumpall
-s
>
$TMPFILE
2>/dev/null
...
...
@@ -161,7 +182,7 @@ pg_ctl stop
echo
"Commit fixes complete, moving data files..."
cat
"
$
INPUT
"
|
while
read
LINE
cat
"
$
SCHEMA
"
|
while
read
LINE
do
if
/bin/echo
"
$LINE
"
|
grep
-q
"^
\\\\
connect "
then
OLDDB
=
"
$DB
"
...
...
@@ -176,7 +197,7 @@ do
if
echo
"
$LINE
"
|
grep
-q
"^-- TOC Entry ID [0-9]* (OID "
then
OID
=
"
`
echo
\"
$LINE
\"
|
cut
-d
' '
-f7
|
tr
-d
')'
`
"
fi
if
echo
"
$LINE
"
|
grep
-q
"^-- Name: [^ ]* Type: TABLE "
if
echo
"
$LINE
"
|
e
grep
-q
"^-- Name: [^ ]* Type:
(
TABLE
|INDEX)
"
then
TABLE
=
"
`
echo
\"
$LINE
\"
|
cut
-d
' '
-f3
`
"
# skip system tables
if
[
"
`
echo
\"
$TABLE
\"
|
cut
-c
1-3
`
"
=
"pg_"
]
...
...
@@ -194,7 +215,8 @@ do
{print $0 >> "/tmp/x";
print $3 >> "/tmp/x";
print newdb," ", newoid >> "/tmp/x"}
$0 ~ /^-- Name: [^ ]* Type: TABLE / && \
($0 ~ /^-- Name: [^ ]* Type: TABLE / && \
$0 ~ /^-- Name: [^ ]* Type: INDEX /) && \
newdb == "'
"
$DB
"
'" && \
$3 == "'
"
$TABLE
"
'" \
{ ret=newoid; exit}
...
...
@@ -229,6 +251,18 @@ do
fi
done
# set max transaction id, check < 2gig
# 7.1 has non-compressed log file format
if
[
"
$SRCVERSION
"
=
"7.1"
]
# pg_log is oid 1269 in 7.1
LOGSIZE
=
`
ls
-l
"
$OLDDIR
"
/global/1269
"
$OLDDIR
"
/global/1269.
*
2>/dev/null |
awk
-F
' *'
'
BEGIN {sum=0;}
{sum += $5;}
END {print sum;}'
`
fi
echo
"You must stop/start the postmaster before doing anything else."
echo
"You may remove the
$OLDDIR
directory with 'rm -r
$OLDDIR
'."
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment