From 39627b1ae680cba44f6e56ca5facec4fdbfe9495 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 27 Mar 2008 17:24:16 +0000 Subject: [PATCH] Remove ipcclean utility command --- didn't work on all Unixes and on Windows. Users should use their operating system tools instead. --- doc/src/sgml/ref/allfiles.sgml | 3 +- doc/src/sgml/ref/ipcclean.sgml | 70 ------------------ doc/src/sgml/reference.sgml | 3 +- src/backend/utils/init/miscinit.c | 5 +- src/bin/Makefile | 4 +- src/bin/ipcclean/Makefile | 32 --------- src/bin/ipcclean/ipcclean.sh | 116 ------------------------------ 7 files changed, 6 insertions(+), 227 deletions(-) delete mode 100644 doc/src/sgml/ref/ipcclean.sgml delete mode 100644 src/bin/ipcclean/Makefile delete mode 100644 src/bin/ipcclean/ipcclean.sh diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml index 898c2c6791..b80a2cf8f0 100644 --- a/doc/src/sgml/ref/allfiles.sgml +++ b/doc/src/sgml/ref/allfiles.sgml @@ -1,5 +1,5 @@ @@ -145,7 +145,6 @@ Complete list of usable sgml source files in this directory. - diff --git a/doc/src/sgml/ref/ipcclean.sgml b/doc/src/sgml/ref/ipcclean.sgml deleted file mode 100644 index 97f0d88195..0000000000 --- a/doc/src/sgml/ref/ipcclean.sgml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - ipcclean - 1 - Application - - - - ipcclean - remove shared memory and semaphores from a failed PostgreSQL server - - - - ipcclean - - - - - ipcclean - - - - - Description - - ipcclean removes all shared memory segments and - semaphore sets owned by the current user. It is intended to be - used for cleaning up after a crashed - PostgreSQL server (). Note that immediately restarting the - server will also clean up shared memory and semaphores, so this - command is of little real utility. - - - - Only the database administrator should execute this program as it - can cause bizarre behavior (i.e., crashes) if run during multiuser - execution. If this command is executed while a server is running, - the shared memory and semaphores allocated by that server will be - deleted, which would have rather severe consequences for that - server. - - - - - Notes - - - This script is a hack, but in the many years since it was written, - no one has come up with an equally effective and portable solution. - Since postgres can now clean up by - itself, it is unlikely that ipcclean will be - improved upon in the future. - - - - The script makes assumptions about the output format of the - ipcs - utility which might not be true across different operating systems. - Therefore, it might not work on your particular OS. It's wise to - look at the script before trying it. - - - - diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml index 1e8e546531..a0aed8edf5 100644 --- a/doc/src/sgml/reference.sgml +++ b/doc/src/sgml/reference.sgml @@ -1,4 +1,4 @@ - + Reference @@ -211,7 +211,6 @@ &initdb; - &ipcclean; &pgControldata; &pgCtl; &pgResetxlog; diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 5a42a8953a..5369da439b 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.166 2008/01/03 21:23:15 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.167 2008/03/27 17:24:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -841,8 +841,7 @@ CreateLockFile(const char *filename, bool amPostmaster, id1, id2), errhint("If you're sure there are no old " "server processes still running, remove " - "the shared memory block with " - "the command \"ipcclean\", \"ipcrm\", " + "the shared memory block " "or just delete the file \"%s\".", filename))); } diff --git a/src/bin/Makefile b/src/bin/Makefile index 5638935127..2dbd93ec51 100644 --- a/src/bin/Makefile +++ b/src/bin/Makefile @@ -5,7 +5,7 @@ # Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # -# $PostgreSQL: pgsql/src/bin/Makefile,v 1.52 2008/03/18 16:24:50 petere Exp $ +# $PostgreSQL: pgsql/src/bin/Makefile,v 1.53 2008/03/27 17:24:16 momjian Exp $ # #------------------------------------------------------------------------- @@ -13,7 +13,7 @@ subdir = src/bin top_builddir = ../.. include $(top_builddir)/src/Makefile.global -DIRS = initdb ipcclean pg_ctl pg_dump \ +DIRS = initdb pg_ctl pg_dump \ psql scripts pg_config pg_controldata pg_resetxlog ifeq ($(PORTNAME), win32) DIRS+=pgevent diff --git a/src/bin/ipcclean/Makefile b/src/bin/ipcclean/Makefile deleted file mode 100644 index 18cca54371..0000000000 --- a/src/bin/ipcclean/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#------------------------------------------------------------------------- -# -# Makefile for src/bin/ipcclean -# -# Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group -# Portions Copyright (c) 1994, Regents of the University of California -# -# $PostgreSQL: pgsql/src/bin/ipcclean/Makefile,v 1.22 2008/01/01 19:45:55 momjian Exp $ -# -#------------------------------------------------------------------------- - -subdir = src/bin/ipcclean -top_builddir = ../../.. -include $(top_builddir)/src/Makefile.global - -all: ipcclean - -ipcclean: ipcclean.sh - cp $< $@ - chmod a+x $@ - -install: all installdirs - $(INSTALL_SCRIPT) ipcclean '$(DESTDIR)$(bindir)/ipcclean' - -installdirs: - $(mkinstalldirs) '$(DESTDIR)$(bindir)' - -uninstall: - rm -f '$(DESTDIR)$(bindir)/ipcclean' - -clean distclean maintainer-clean: - rm -f ipcclean diff --git a/src/bin/ipcclean/ipcclean.sh b/src/bin/ipcclean/ipcclean.sh deleted file mode 100644 index f55f8c7e3a..0000000000 --- a/src/bin/ipcclean/ipcclean.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/bin/sh -# -# $PostgreSQL: pgsql/src/bin/ipcclean/ipcclean.sh,v 1.18 2006/03/03 21:52:37 momjian Exp $ -# - -CMDNAME=`basename $0` - -if [ "$1" = '-?' -o "$1" = "--help" ]; then - echo "$CMDNAME cleans up shared memory and semaphores from aborted PostgreSQL" - echo "backends." - echo - echo "Usage:" - echo " $CMDNAME" - echo - echo "Note: Since the utilities underlying this script are very different" - echo "from platform to platform, chances are that it might not work on" - echo "yours. If that is the case, please write to " - echo "so that your platform can be supported in the future." - exit 0 -fi - -# test for running as root - -ISROOT="N" -if id -u >/dev/null 2>&1 -then if [ `id -u` -eq 0 ] - then ISROOT="Y" - fi -elif # only check $LOGNAME if $USER is not set - [ "$USER" = 'root' -o \( ! "$USER" -a "$LOGNAME" = 'root' \) ] -then ISROOT="Y" -fi - -if [ "$ISROOT" = "Y" ] -then - ( - echo "$CMDNAME: cannot be run as root" 1>&2 - echo "Please log in (using, e.g., \"su\") as the (unprivileged) user that" 1>&2 - echo "owned the server process." 1>&2 - ) 1>&2 - exit 1 -fi - -EffectiveUser=`id -n -u 2>/dev/null || whoami 2>/dev/null` - -#----------------------------------- -# List of platform-specific hacks -# Feel free to add yours here. -#----------------------------------- -# -# This is based on RedHat 5.2. -# -if [ `uname` = 'Linux' ]; then - did_anything= - - if ps x | grep -s '[p]ostmaster' >/dev/null 2>&1 ; then - echo "$CMDNAME: a postmaster is still running" 1>&2 - exit 1 - fi - - # shared memory - for val in `ipcs -m -p | grep '^[0-9]' | awk '{printf "%s:%s:%s\n", $1, $3, $4}'` - do - save_IFS=$IFS - IFS=: - set X $val - shift - IFS=$save_IFS - ipcs_shmid=$1 - ipcs_cpid=$2 - ipcs_lpid=$3 - - # Note: We can do -n here, because we know the platform. - echo -n "Shared memory $ipcs_shmid ... " - - # Don't do anything if process still running. - # (This check is conceptually phony, but it's - # useful anyway in practice.) - ps hj $ipcs_cpid $ipcs_lpid >/dev/null 2>&1 - if [ "$?" -eq 0 ]; then - echo "skipped; process still exists (pid $ipcs_cpid or $ipcs_lpid)." - continue - fi - - # try remove - ipcrm shm $ipcs_shmid - if [ "$?" -eq 0 ]; then - did_anything=t - else - exit - fi - done - - # semaphores - for val in `ipcs -s -c | grep '^[0-9]' | awk '{printf "%s\n", $1}'`; do - echo -n "Semaphore $val ... " - # try remove - ipcrm sem $val - if [ "$?" -eq 0 ]; then - did_anything=t - else - exit - fi - done - - [ -z "$did_anything" ] && echo "$CMDNAME: nothing removed" && exit 1 - exit 0 -fi # end Linux - - -# This is the original implementation. It seems to work -# on FreeBSD, SunOS/Solaris, HP-UX, IRIX, and probably -# some others. - -ipcs | egrep '^m .*|^s .*' | egrep "$EffectiveUser" | \ -awk '{printf "ipcrm -%s %s\n", $1, $2}' '-' | sh