[postgis-users] postgis_restore.pl patch to allow psql options

James Marca jmarca at translab.its.uci.edu
Tue May 17 14:31:35 PDT 2005


Hi, this is my third and final patch to postgis_restore.pl which
allows one to pass psql options, such as username, host, and port.

It must be applied after the previous "addpod" patch, but I broke it
out so that the maintainers can better decide what to keep and what to
reject.

Finally, note that while I have used the final script on my machine, I
only upgraded from postgres 8.0.1, postgis 1rc3 -> postgres 8.0.1,
postgis 1.0.0, and I only did so on my Linux box. 

Hope this is useful.

James
 
--- postgis-1.0.0/utils/postgis_restore.pl.pod	2005-05-17 14:15:15.000000000 -0700
+++ postgis-1.0.0/utils/postgis_restore.pl	2005-05-17 14:18:52.000000000 -0700
@@ -38,12 +38,34 @@
 #
 use strict;
 use warnings;
+use Getopt::Long;
 use Pod::Usage;
 
 # eval "exec perl -w $0 $@"
 # 	if (0);
 
-(@ARGV == 3) || pod2usage(-exitstatus => 0, -verbose => 2);
+# (@ARGV == 3) || pod2usage(-exitstatus => 0, -verbose => 2);
+
+# Grab options from the command line
+my $help   = 0;
+my $man    = 0;
+my $dbuser   = getlogin();
+my $dbhost="";
+my $dbport="";
+my $dbpassword=undef;
+
+my $p = new Getopt::Long::Parser;
+$p->getoptions
+    ( 'user|username|U=s'        => \$dbuser,
+      'host|h=s'        => \$dbhost,
+      'password|W'    => \$dbpassword, #does nothing, but lets people enter something
+      'port|p=i'        => \$dbport,
+      'help|?'        => \$help,  # see the pod (--help)
+      'man|pod'         => \$man,
+      ) or pod2usage(2);
+
+pod2usage(-verbose=>1) if $help;
+pod2usage(-exitval => 0, -verbose => 2) if $man;
 
 my $DEBUG=1;
 
@@ -104,6 +126,12 @@ my %obsoleted_function = (
 my $postgissql = $ARGV[0];
 my $dbname = $ARGV[1];
 my $dump = $ARGV[2];
+
+if ( ! $dump ) {
+    pod2usage(-exitval => 2, -verbose => 0,
+	      -msg => "Cannot proceed without a dumpfile to process.");
+}
+
 my $dumplist=$dump.".list";
 my $dumpascii=$dump.".ascii";
 
@@ -111,12 +139,29 @@ print "postgis.sql is $postgissql\n";
 print "dbname is $dbname\n";
 print "dumpfile is $dump\n";
 
-# form the various client program commands, for use later
+# form the various client program commands, with appropriate options
 
-my $pg_restore_command= "pg_restore ";
-my $createdb_command = "createdb  ";
-my $createlang_command = "createlang   ";
-my $psql_command = "psql  ";
+my $pg_restore_command= "pg_restore -U $dbuser -W";
+my $createdb_command = "createdb -U $dbuser -W  ";
+my $createlang_command = "createlang -U $dbuser -W  ";
+my $psql_command = "psql -U $dbuser -W  ";
+
+if($dbhost){
+    foreach ($pg_restore_command,
+	     $createdb_command,
+	     $createlang_command,
+	     $psql_command){
+	$_ .=" -h $dbhost ";
+    }
+}
+if($dbport){
+    foreach ($pg_restore_command,
+	     $createdb_command,
+	     $createlang_command,
+	     $psql_command){
+	$_ .=" -p $dbport ";
+    }
+}
 
 #
 # Scan postgis.sql
@@ -675,6 +720,16 @@ Arguments:
   db --- the new database name.  This cannot be an existing database
   dump --- the dump file created by pg_dump
 
+Options:
+
+ -h, --host=HOSTNAME  database server host or socket directory
+ -p, --port=PORT      database server port number
+ -U, --username=NAME  connect as specified database user
+ -W, --password       force password prompt (automatic, included 
+                      only to mimic psql interface)
+ --help,?             brief help message
+ --man, --pod         full documentation
+
 =head1 ARGUMENTS
 
 =over 
@@ -705,6 +760,50 @@ to get a dump file called olddb.dump
 
 =back
 
+=head1 OPTIONS
+    
+=over
+
+=item B<-h, --host>=HOSTNAME
+
+Specifies the host name of the machine on which the server is running.
+If the value begins with a slash, it is used as the directory for the
+Unix- domain socket. If omitted, the behavior will be identical to
+that of psql without passing the -h option.
+
+=item B<-p, --port>=port 
+
+Specifies the TCP port or the local Unix-domain socket file extension
+on which the server is lis- tening for connections. Defaults to the
+value of the PGPORT environment variable or, if not set, to the port
+specified at PostgreSQL compile time (usually 5432).  
+
+
+=item B<-U, --username>=username  
+
+Connect to the database as the user username instead of the default.
+(You must have permission to do so, of course.) If omitted, the
+default current user will be obtained explicitly by a (Perl) call to
+getlogin().
+
+=item B<-W, --password>
+
+This option isn't used.  In the future, if this script is extended to
+use the Perl DBI, then this option will allow one to pass in the
+correct password for the given username.  At the moment, all calls to
+psql, pg_restore, etc explicitly include the '-W' parameter,
+regardless of the contents of this command line option.
+
+=item B<--help>
+
+Print a brief help message and exits.
+    
+=item B<--man>, B<--pod>
+    
+Prints this manual page and exits.
+    
+=back
+    
 =head1 DESCRIPTION
 
 B<postgis_restore.pl> is aimed at restoring postgis data from a
@@ -761,8 +860,8 @@ The original code was tested on the foll
 
 =back
 
-Note that this version, which adds pod, pod2usage calls, and modifies
-some small pieces of logic, has not been tested on these platforms.
+This version, which includes host, port, and username options, has not
+been tested on these platforms.
 
 =head1 AUTHOR
 



More information about the postgis-users mailing list