def parse_connection_string_libpq(connection_string):
    """parse a postgresql connection string as defined in
    http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING"""
    fields = {}
    while True:
        connection_string = connection_string.strip()
        if not connection_string:
            break
        if '=' not in connection_string:
            raise ValueError(
                'expecting key=value format in connection_string fragment {!r}'
                .format(connection_string))
        key, rem = connection_string.split('=', 1)
        if rem.startswith("'"):
            asis, value = False, ''
            for i in range(1, len(rem)):
                if asis:
                    value += rem[i]
                    asis = False
                elif rem[i] == "'":
                    break
                elif rem[i] == '\\':
                    asis = True
                else:
                    value += rem[i]
            else:
                raise ValueError('invalid connection_string fragment {!r}'.
                    format(rem))
            connection_string = rem[i + 1:]
        else:
            res = rem.split(None, 1)
            if len(res) > 1:
                value, connection_string = res
            else:
                value, connection_string = rem, ''
        fields[key] = value
    return fields
