=over
 
-=item PostgreSQL::Test::BackgroundPsql->new(interactive, @psql_params, timeout)
+=item PostgreSQL::Test::BackgroundPsql->new(interactive, @psql_params, timeout, wait)
 
 Builds a new object of class C<PostgreSQL::Test::BackgroundPsql> for either
 an interactive or background session and starts it. If C<interactive> is
 command to run psql with all desired parameters and a complete connection
 string. For C<interactive> sessions, IO::Pty is required.
 
+This routine will not return until psql has started up and is ready to
+consume input. Set B<wait> to 0 to return immediately instead.
+
 =cut
 
 sub new
 {
        my $class = shift;
-       my ($interactive, $psql_params, $timeout) = @_;
+       my ($interactive, $psql_params, $timeout, $wait) = @_;
        my $psql = {
                'stdin' => '',
                'stdout' => '',
 
        my $self = bless $psql, $class;
 
-       $self->_wait_connect();
+       $wait = 1 unless defined($wait);
+       if ($wait)
+       {
+               $self->wait_connect();
+       }
 
        return $self;
 }
 
-# Internal routine for awaiting psql starting up and being ready to consume
-# input.
-sub _wait_connect
+=pod
+
+=item $session->wait_connect
+
+Returns once psql has started up and is ready to consume input. This is called
+automatically for clients unless requested otherwise in the constructor.
+
+=cut
+
+sub wait_connect
 {
        my ($self) = @_;
 
        $self->{stdin} = '';
        $self->{stdout} = '';
 
-       $self->_wait_connect();
+       $self->wait_connect();
 }
 
 =pod
 
 
 If given, it must be an array reference containing additional parameters to B<psql>.
 
+=item wait => 1
+
+By default, this method will not return until connection has completed (or
+failed). Set B<wait> to 0 to return immediately instead. (Clients can call the
+session's C<wait_connect> method manually when needed.)
+
 =back
 
 =cut
                '-XAtq', '-d', $psql_connstr, '-f', '-');
 
        $params{on_error_stop} = 1 unless defined $params{on_error_stop};
+       $params{wait} = 1 unless defined $params{wait};
        $timeout = $params{timeout} if defined $params{timeout};
 
        push @psql_params, '-v', 'ON_ERROR_STOP=1' if $params{on_error_stop};
        push @psql_params, @{ $params{extra_params} }
          if defined $params{extra_params};
 
-       return PostgreSQL::Test::BackgroundPsql->new(0, \@psql_params, $timeout);
+       return PostgreSQL::Test::BackgroundPsql->new(0, \@psql_params, $timeout,
+               $params{wait});
 }
 
 =pod