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)
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")
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)
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)
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)