summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Wieck2000-11-02 16:54:21 +0000
committerJan Wieck2000-11-02 16:54:21 +0000
commit013c2c65e03f4e1bc6b7af88c6ab1a351f1476dd (patch)
treef94f5bf1d6609dd3c132e9a03e60dd9c03cf546c
parent75413f7af95ec6532199db7ccabff5debc3d82c3 (diff)
New dump utility script pg_dumpaccounts.
Dumps pg_shadow and pg_group (derived from pg_dumpall). Jan
-rw-r--r--src/bin/pg_dump/Makefile.in3
-rw-r--r--src/bin/pg_dump/pg_dumpaccounts65
2 files changed, 67 insertions, 1 deletions
diff --git a/src/bin/pg_dump/Makefile.in b/src/bin/pg_dump/Makefile.in
index dddc006b8bd..0e8e26ac4da 100644
--- a/src/bin/pg_dump/Makefile.in
+++ b/src/bin/pg_dump/Makefile.in
@@ -7,7 +7,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/Makefile.in,v 1.13 2000/05/11 17:46:32 momjian Exp $
+# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/Makefile.in,v 1.13.2.1 2000/11/02 16:54:21 wieck Exp $
#
#-------------------------------------------------------------------------
@@ -41,6 +41,7 @@ submake:
install: pg_dump
$(INSTALL) $(INSTL_EXE_OPTS) pg_dump$(X) $(BINDIR)/pg_dump$(X)
$(INSTALL) $(INSTL_EXE_OPTS) pg_dumpall $(BINDIR)/pg_dumpall
+ $(INSTALL) $(INSTL_EXE_OPTS) pg_dumpaccounts $(BINDIR)/pg_dumpaccounts
$(INSTALL) $(INSTL_EXE_OPTS) pg_upgrade $(BINDIR)/pg_upgrade
depend dep:
diff --git a/src/bin/pg_dump/pg_dumpaccounts b/src/bin/pg_dump/pg_dumpaccounts
new file mode 100644
index 00000000000..7d68d153ade
--- /dev/null
+++ b/src/bin/pg_dump/pg_dumpaccounts
@@ -0,0 +1,65 @@
+#!/bin/sh
+#
+# pg_dumpaccounts
+# dumps the pg_shadow and pg_group tables, which belong to the
+# whole installation rather than any one individual database.
+#
+# $Header: /cvsroot/pgsql/src/bin/pg_dump/Attic/pg_dumpaccounts,v 1.1.2.1 2000/11/02 16:54:21 wieck Exp $
+#
+# to adapt to System V vs. BSD 'echo'
+if echo '\\' | grep '\\\\' >/dev/null 2>&1
+then
+ BS='\' # BSD
+else
+ BS='\\' # System V
+fi
+#
+# Dump everyone but the postgres user
+# initdb creates him
+#
+# get the postgres user id
+#
+POSTGRES_SUPER_USER_ID="`echo \" \
+ select datdba \
+ from pg_database \
+ where datname = 'template1'; \" | \
+ psql -A -q -t template1`"
+echo "${BS}connect template1"
+#
+# delete all users in case they run this twice
+#
+# we don't use POSTGRES_SUPER_USER_ID because the postgres super user id
+# could be different on the two installations
+#
+echo "select datdba into table tmp_pg_shadow \
+ from pg_database where datname = 'template1';"
+echo "delete from pg_shadow where usesysid <> tmp_pg_shadow.datdba;"
+echo "drop table tmp_pg_shadow;"
+#
+# load all the non-postgres users
+# XXX this breaks badly if the layout of pg_shadow ever changes.
+# It'd be better to convert the data into CREATE USER commands.
+#
+echo "copy pg_shadow from stdin;"
+psql -q template1 <<END
+select pg_shadow.*
+into table tmp_pg_shadow
+from pg_shadow
+where usesysid <> $POSTGRES_SUPER_USER_ID;
+copy tmp_pg_shadow to stdout;
+drop table tmp_pg_shadow;
+END
+echo "${BS}."
+#
+# copy the pg_group table too
+# XXX this breaks badly if the layout of pg_group ever changes.
+# It'd be better to convert the data into CREATE GROUP commands.
+#
+echo "delete from pg_group;"
+echo "copy pg_group from stdin;"
+psql -q template1 <<END
+copy pg_group to stdout;
+END
+echo "${BS}."
+
+exit 0