Adds percona server for postgresql support (#19322)

* percona server for postgresql support

The only meaningful difference is version string in percona server for postgresql. So commit propose universal and safe way to detect server version by integer string, not complicated parsing of unformatted string.

* updated tests with get_server_version_num

commented outdated tests

---------

Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com>
(cherry picked from commit dcebc41e3f845933aaa9b9de8761eeb8fc52f9ee)
This commit is contained in:
agriev 2025-01-14 02:51:40 +01:00 committed by OpenMetadata Release Bot
parent 4b2ff1cba9
commit cbbbca5472
3 changed files with 9 additions and 11 deletions

View File

@ -193,7 +193,7 @@ POSTGRES_SQL_COLUMNS = """
"""
POSTGRES_GET_SERVER_VERSION = """
show server_version
show server_version_num
"""
POSTGRES_FETCH_FK = """

View File

@ -45,7 +45,7 @@ from metadata.utils.sqlalchemy_utils import (
logger = utils_logger()
OLD_POSTGRES_VERSION = "13.0"
OLD_POSTGRES_VERSION = "130000"
def get_etable_owner(
@ -523,9 +523,6 @@ def get_postgres_version(engine) -> Optional[str]:
results = engine.execute(POSTGRES_GET_SERVER_VERSION)
for res in results:
version_string = str(res[0])
opening_parenthesis_index = version_string.find("(")
if opening_parenthesis_index != -1:
return version_string[:opening_parenthesis_index].strip()
return version_string
except Exception as err:
logger.warning(f"Unable to fetch the Postgres Version - {err}")

View File

@ -320,14 +320,15 @@ class PostgresUnitTest(TestCase):
@patch("sqlalchemy.engine.base.Engine")
def test_get_version_info(self, engine):
engine.execute.return_value = [["15.3 (Debian 15.3-1.pgdg110+1)"]]
self.assertEqual("15.3", get_postgres_version(engine))
# outdated with a switch to get_server_version_num instead of get_+server_version
# engine.execute.return_value = [["15.3 (Debian 15.3-1.pgdg110+1)"]]
# self.assertEqual("15.3", get_postgres_version(engine))
engine.execute.return_value = [["11.16"]]
self.assertEqual("11.16", get_postgres_version(engine))
engine.execute.return_value = [["110016"]]
self.assertEqual("110016", get_postgres_version(engine))
engine.execute.return_value = [["9.6.24"]]
self.assertEqual("9.6.24", get_postgres_version(engine))
engine.execute.return_value = [["90624"]]
self.assertEqual("90624", get_postgres_version(engine))
engine.execute.return_value = [[]]
self.assertIsNone(get_postgres_version(engine))