Пример #1
0
    def test_server_version_02(self):
        versions = [
            (
                "9.2",
                (9, 2, 0, 'final', 0),
            ),
            (
                "9.2.1",
                (9, 2, 1, 'final', 0),
            ),
            (
                "9.4beta1",
                (9, 4, 0, 'beta', 1),
            ),
            (
                "10devel",
                (10, 0, 0, 'devel', 0),
            ),
            (
                "10beta2",
                (10, 0, 0, 'beta', 2),
            ),

            # Despite the fact after version 10 Postgre's second number
            # means "micro", it is parsed "as is" to be
            # less confusing in comparisons.
            (
                "10.1",
                (10, 1, 0, 'final', 0),
            ),
        ]
        for version, expected in versions:
            result = split_server_version_string(version)
            self.assertEqual(expected, result)
Пример #2
0
def get_pg_version() -> BackendVersion:
    global _bundled_pg_version
    if _bundled_pg_version is not None:
        return _bundled_pg_version

    from asyncpg import serverversion

    pg_config = subprocess.run(
        [get_pg_config_path()],
        capture_output=True,
        text=True,
        check=True,
    )

    for line in pg_config.stdout.splitlines():
        k, eq, v = line.partition('=')
        if eq and k.strip().lower() == 'version':
            v = v.strip()
            parsed_ver = serverversion.split_server_version_string(v)
            _bundled_pg_version = BackendVersion(
                major=parsed_ver.major,
                minor=parsed_ver.minor,
                micro=parsed_ver.micro,
                releaselevel=parsed_ver.releaselevel,
                serial=parsed_ver.serial,
                string=v,
            )
            return _bundled_pg_version
    else:
        raise MetadataError(
            "could not find version information in pg_config output")
Пример #3
0
 def test_server_version_02(self):
     versions = [
         ("9.2", (9, 2, 0, 'final', 0),),
         ("Postgres-XL 9.2.1", (9, 2, 1, 'final', 0),),
         ("9.4beta1", (9, 4, 0, 'beta', 1),),
         ("10devel", (10, 0, 0, 'devel', 0),),
         ("10beta2", (10, 0, 0, 'beta', 2),),
         # For PostgreSQL versions >=10 we always
         # set version.minor to 0.
         ("10.1", (10, 0, 1, 'final', 0),),
         ("11.1.2", (11, 0, 1, 'final', 0),),
         ("PostgreSQL 10.1 (Debian 10.1-3)", (10, 0, 1, 'final', 0),),
     ]
     for version, expected in versions:
         result = split_server_version_string(version)
         self.assertEqual(expected, result)
Пример #4
0
 def test_server_version_02(self):
     versions = [
         ("9.2", (9, 2, 0, 'final', 0),),
         ("Postgres-XL 9.2.1", (9, 2, 1, 'final', 0),),
         ("9.4beta1", (9, 4, 0, 'beta', 1),),
         ("10devel", (10, 0, 0, 'devel', 0),),
         ("10beta2", (10, 0, 0, 'beta', 2),),
         # For PostgreSQL versions >=10 we always
         # set version.minor to 0.
         ("10.1", (10, 0, 1, 'final', 0),),
         ("11.1.2", (11, 0, 1, 'final', 0),),
         ("PostgreSQL 10.1 (Debian 10.1-3)", (10, 0, 1, 'final', 0),),
     ]
     for version, expected in versions:
         result = split_server_version_string(version)
         self.assertEqual(expected, result)
Пример #5
0
    def _get_pg_version(self):
        process = subprocess.run(
            [self._postgres, '--version'],
            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = process.stdout, process.stderr

        if process.returncode != 0:
            raise ClusterError(
                'postgres --version exited with status {:d}: {}'.format(
                    process.returncode, stderr))

        version_string = stdout.decode('utf-8').strip(' \n')
        prefix = 'postgres (PostgreSQL) '
        if not version_string.startswith(prefix):
            raise ClusterError(
                'could not determine server version from {!r}'.format(
                    version_string))
        version_string = version_string[len(prefix):]

        return serverversion.split_server_version_string(version_string)
Пример #6
0
    def _get_pg_version(self):
        process = subprocess.run(
            [self._postgres, '--version'],
            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = process.stdout, process.stderr

        if process.returncode != 0:
            raise ClusterError(
                'postgres --version exited with status {:d}: {}'.format(
                    process.returncode, stderr))

        version_string = stdout.decode('utf-8').strip(' \n')
        prefix = 'postgres (PostgreSQL) '
        if not version_string.startswith(prefix):
            raise ClusterError(
                'could not determine server version from {!r}'.format(
                    version_string))
        version_string = version_string[len(prefix):]

        return serverversion.split_server_version_string(version_string)
Пример #7
0
    def _get_pg_version(self):
        version_string = self._pg_config_data.get('version')
        if not version_string:
            raise ClusterError('could not determine PostgreSQL version')

        return serverversion.split_server_version_string(version_string)