diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 7eb474ca3e..bcd7c1c90b 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -434,17 +434,17 @@ usage(const char *progname)
 	printf("%s removes unreferenced large objects from databases.\n\n", progname);
 	printf("Usage:\n  %s [OPTION]... DBNAME...\n\n", progname);
 	printf("Options:\n");
-	printf("  -l LIMIT       commit after removing each LIMIT large objects\n");
-	printf("  -n             don't remove large objects, just show what would be done\n");
-	printf("  -v             write a lot of progress messages\n");
-	printf("  -V, --version  output version information, then exit\n");
-	printf("  -?, --help     show this help, then exit\n");
+	printf("  -l, --limit=LIMIT         commit after removing each LIMIT large objects\n");
+	printf("  -n, --dry-run             don't remove large objects, just show what would be done\n");
+	printf("  -v, --verbose             write a lot of progress messages\n");
+	printf("  -V, --version             output version information, then exit\n");
+	printf("  -?, --help                show this help, then exit\n");
 	printf("\nConnection options:\n");
-	printf("  -h HOSTNAME    database server host or socket directory\n");
-	printf("  -p PORT        database server port\n");
-	printf("  -U USERNAME    user name to connect as\n");
-	printf("  -w             never prompt for password\n");
-	printf("  -W             force password prompt\n");
+	printf("  -h, --host=HOSTNAME       database server host or socket directory\n");
+	printf("  -p, --port=PORT           database server port\n");
+	printf("  -U, --username=USERNAME   user name to connect as\n");
+	printf("  -w, --no-password         never prompt for password\n");
+	printf("  -W, --password            force password prompt\n");
 	printf("\n");
 	printf("Report bugs to <pgsql-bugs@postgresql.org>.\n");
 }
@@ -453,11 +453,24 @@ usage(const char *progname)
 int
 main(int argc, char **argv)
 {
+	static struct option long_options[] = {
+		{"host", required_argument, NULL, 'h'},
+		{"limit", required_argument, NULL, 'l'},
+		{"username", required_argument, NULL, 'U'},
+		{"port", required_argument, NULL, 'p'},
+		{"verbose", no_argument, NULL, 'v'},
+		{"dry-run", no_argument, NULL, 'n'},
+		{"no-password", no_argument, NULL, 'w'},
+		{"password", no_argument, NULL, 'W'},
+		{NULL, 0, NULL, 0}
+	};
+
 	int			rc = 0;
 	struct _param param;
 	int			c;
 	int			port;
 	const char *progname;
+	int			optindex;
 
 	progname = get_progname(argv[0]);
 
@@ -486,25 +499,14 @@ main(int argc, char **argv)
 		}
 	}
 
-	while (1)
+	while((c = getopt_long(argc, argv, "h:l:U:p:vnwW", long_options, &optindex)) != -1)
 	{
-		c = getopt(argc, argv, "h:l:U:p:vnwW");
-		if (c == -1)
-			break;
-
 		switch (c)
 		{
-			case '?':
-				fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
-				exit(1);
 			case ':':
 				exit(1);
-			case 'v':
-				param.verbose = 1;
-				break;
-			case 'n':
-				param.dry_run = 1;
-				param.verbose = 1;
+			case 'h':
+				param.pg_host = pg_strdup(optarg);
 				break;
 			case 'l':
 				param.transaction_limit = strtol(optarg, NULL, 10);
@@ -519,12 +521,6 @@ main(int argc, char **argv)
 			case 'U':
 				param.pg_user = pg_strdup(optarg);
 				break;
-			case 'w':
-				param.pg_prompt = TRI_NO;
-				break;
-			case 'W':
-				param.pg_prompt = TRI_YES;
-				break;
 			case 'p':
 				port = strtol(optarg, NULL, 10);
 				if ((port < 1) || (port > 65535))
@@ -534,8 +530,18 @@ main(int argc, char **argv)
 				}
 				param.pg_port = pg_strdup(optarg);
 				break;
-			case 'h':
-				param.pg_host = pg_strdup(optarg);
+			case 'v':
+				param.verbose = 1;
+				break;
+			case 'n':
+				param.dry_run = 1;
+				param.verbose = 1;
+				break;
+			case 'w':
+				param.pg_prompt = TRI_NO;
+				break;
+			case 'W':
+				param.pg_prompt = TRI_YES;
 				break;
 		}
 	}
diff --git a/doc/src/sgml/vacuumlo.sgml b/doc/src/sgml/vacuumlo.sgml
index 0b4dfc2b17..e46c27030b 100644
--- a/doc/src/sgml/vacuumlo.sgml
+++ b/doc/src/sgml/vacuumlo.sgml
@@ -55,10 +55,11 @@
 
   <variablelist>
    <varlistentry>
-    <term><option>-l</option> <replaceable>limit</replaceable></term>
+    <term><option>-l <replaceable class="parameter">limit</replaceable></option></term>
+    <term><option>--limit=<replaceable class="parameter">limit</replaceable></option></term>
     <listitem>
      <para>
-      Remove no more than <replaceable>limit</replaceable> large objects per
+      Remove no more than <replaceable class="parameter">limit</replaceable> large objects per
       transaction (default 1000).  Since the server acquires a lock per LO
       removed, removing too many LOs in one transaction risks exceeding
       <xref linkend="guc-max-locks-per-transaction"/>.  Set the limit to
@@ -68,21 +69,23 @@
    </varlistentry>
 
    <varlistentry>
-    <term><option>-n</option></term>
+    <term><option>-n </option></term>
+    <term><option>--dry-run</option></term>
     <listitem>
      <para>Don't remove anything, just show what would be done.</para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
-    <term><option>-v</option></term>
+    <term><option>-v </option></term>
+    <term><option>--verbose</option></term>
     <listitem>
      <para>Write a lot of progress messages.</para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
-    <term><option>-V</option></term>
+    <term><option>-V </option></term>
     <term><option>--version</option></term>
     <listitem>
      <para>
@@ -92,7 +95,7 @@
    </varlistentry>
 
    <varlistentry>
-    <term><option>-?</option></term>
+    <term><option>-? </option></term>
     <term><option>--help</option></term>
     <listitem>
      <para>
@@ -110,28 +113,31 @@
 
   <variablelist>
    <varlistentry>
-    <term><option>-h</option> <replaceable>hostname</replaceable></term>
+    <term><option>-h <replaceable class="parameter">host</replaceable></option></term>
+    <term><option>--host=<replaceable class="parameter">host</replaceable></option></term>
     <listitem>
      <para>Database server's host.</para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
-    <term><option>-p</option> <replaceable>port</replaceable></term>
+    <term><option>-p <replaceable>port</replaceable></option></term>
+    <term><option>--port=<replaceable class="parameter">port</replaceable></option></term>
     <listitem>
      <para>Database server's port.</para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
-    <term><option>-U</option> <replaceable>username</replaceable></term>
+    <term><option>-U <replaceable>username</replaceable></option></term>
+    <term><option>--username=<replaceable class="parameter">username</replaceable></option></term>
     <listitem>
      <para>User name to connect as.</para>
     </listitem>
    </varlistentry>
 
    <varlistentry>
-    <term><option>-w</option></term>
+    <term><option>-w </option></term>
     <term><option>--no-password</option></term>
     <listitem>
      <para>
@@ -145,7 +151,8 @@
    </varlistentry>
 
    <varlistentry>
-    <term><option>-W</option></term>
+    <term><option>-W </option></term>
+    <term><option>--passowrd</option></term>
     <listitem>
      <para>
       Force <application>vacuumlo</application> to prompt for a
@@ -167,6 +174,30 @@
   </para>
  </refsect1>
 
+ <refsect1>
+  <title>Environment</title>
+
+  <variablelist>
+   <varlistentry>
+    <term><envar>PGHOST</envar></term>
+    <term><envar>PGPORT</envar></term>
+    <term><envar>PGUSER</envar></term>
+
+    <listitem>
+     <para>
+      Default connection parameters
+     </para>
+    </listitem>
+   </varlistentry>
+  </variablelist>
+
+  <para>
+   This utility, like most other <productname>PostgreSQL</productname> utilities,
+   also uses the environment variables supported by <application>libpq</application>
+   (see <xref linkend="libpq-envars"/>).
+  </para>
+ </refsect1>
+
  <refsect1>
   <title>Notes</title>
 
