Chore: warn users about postgres 13 deprecation

This commit is contained in:
shamoon 2025-05-19 14:47:16 -07:00
parent 9be6b28141
commit d1a28e975d
No known key found for this signature in database
2 changed files with 65 additions and 0 deletions

View File

@ -212,3 +212,31 @@ def audit_log_check(app_configs, **kwargs):
)
return result
@register()
def check_postgres_version(app_configs, **kwargs):
"""
Django 5.2 deprecated PostgreSQL 13 support, and it will be removed in
a future Paperless-ngx version. This can be removed eventually.
See https://docs.djangoproject.com/en/5.2/releases/5.2/#dropped-support-for-postgresql-13
"""
db_conn = connections["default"]
result = []
if db_conn.vendor == "postgresql":
try:
with db_conn.cursor() as cursor:
cursor.execute("SHOW server_version;")
version = cursor.fetchone()[0]
if version.startswith("13"):
return [
Warning(
"PostgreSQL 13 is deprecated in Django 5.2 and will not be supported in a future Paperless-ngx release.",
hint="Upgrade to PostgreSQL 14 or newer.",
),
]
except Exception: # pragma: no cover
# Don't block checks on version query failure
pass
return result

View File

@ -9,6 +9,7 @@ from documents.tests.utils import DirectoriesMixin
from documents.tests.utils import FileSystemAssertsMixin
from paperless.checks import audit_log_check
from paperless.checks import binaries_check
from paperless.checks import check_postgres_version
from paperless.checks import debug_mode_check
from paperless.checks import paths_check
from paperless.checks import settings_values_check
@ -262,3 +263,39 @@ class TestAuditLogChecks(TestCase):
("auditlog table was found but audit log is disabled."),
msg.msg,
)
class TestPostgresVersionCheck(TestCase):
@mock.patch("paperless.checks.connections")
def test_postgres_13_warns(self, mock_connections):
mock_connection = mock.MagicMock()
mock_connection.vendor = "postgresql"
mock_cursor = mock.MagicMock()
mock_cursor.__enter__.return_value.fetchone.return_value = ["13.11"]
mock_connection.cursor.return_value = mock_cursor
mock_connections.__getitem__.return_value = mock_connection
warnings = check_postgres_version(None)
self.assertEqual(len(warnings), 1)
self.assertIn("PostgreSQL 13 is deprecated", warnings[0].msg)
@mock.patch("paperless.checks.connections")
def test_postgres_14_passes(self, mock_connections):
mock_connection = mock.MagicMock()
mock_connection.vendor = "postgresql"
mock_cursor = mock.MagicMock()
mock_cursor.__enter__.return_value.fetchone.return_value = ["14.10"]
mock_connection.cursor.return_value = mock_cursor
mock_connections.__getitem__.return_value = mock_connection
warnings = check_postgres_version(None)
self.assertEqual(warnings, [])
@mock.patch("paperless.checks.connections")
def test_non_postgres_skipped(self, mock_connections):
mock_connection = mock.MagicMock()
mock_connection.vendor = "sqlite"
mock_connections.__getitem__.return_value = mock_connection
warnings = check_postgres_version(None)
self.assertEqual(warnings, [])