From 628c4a26eee93417bb7161aa393dffb3f4c146b2 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Sun, 26 Jul 2020 22:29:05 +0100 Subject: [PATCH] Refs #27996 -- Doc'd no extension required for RandomUUID() on PostgreSQL 13+. https://www.postgresql.org/docs/13/functions-uuid.html https://www.postgresql.org/docs/13/pgcrypto.html#id-1.11.7.34.10.5 --- django/db/backends/postgresql/features.py | 4 ++++ docs/ref/contrib/postgres/functions.txt | 4 ++-- tests/postgres_tests/migrations/0001_setup_extensions.py | 9 ++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/django/db/backends/postgresql/features.py b/django/db/backends/postgresql/features.py index abcfdf376d..864bcf3919 100644 --- a/django/db/backends/postgresql/features.py +++ b/django/db/backends/postgresql/features.py @@ -79,6 +79,10 @@ class DatabaseFeatures(BaseDatabaseFeatures): def is_postgresql_12(self): return self.connection.pg_version >= 120000 + @cached_property + def is_postgresql_13(self): + return self.connection.pg_version >= 130000 + has_brin_autosummarize = property(operator.attrgetter('is_postgresql_10')) has_websearch_to_tsquery = property(operator.attrgetter('is_postgresql_11')) supports_table_partitions = property(operator.attrgetter('is_postgresql_10')) diff --git a/docs/ref/contrib/postgres/functions.txt b/docs/ref/contrib/postgres/functions.txt index 2c00ce8a1a..447af266a2 100644 --- a/docs/ref/contrib/postgres/functions.txt +++ b/docs/ref/contrib/postgres/functions.txt @@ -14,8 +14,8 @@ All of these functions are available from the Returns a version 4 UUID. -The `pgcrypto extension`_ must be installed. You can use the -:class:`~django.contrib.postgres.operations.CryptoExtension` migration +On PostgreSQL < 13, the `pgcrypto extension`_ must be installed. You can use +the :class:`~django.contrib.postgres.operations.CryptoExtension` migration operation to install it. .. _pgcrypto extension: https://www.postgresql.org/docs/current/pgcrypto.html diff --git a/tests/postgres_tests/migrations/0001_setup_extensions.py b/tests/postgres_tests/migrations/0001_setup_extensions.py index 5064f7ff99..3775295f25 100644 --- a/tests/postgres_tests/migrations/0001_setup_extensions.py +++ b/tests/postgres_tests/migrations/0001_setup_extensions.py @@ -1,6 +1,6 @@ from unittest import mock -from django.db import migrations +from django.db import connection, migrations try: from django.contrib.postgres.operations import ( @@ -14,10 +14,12 @@ except ImportError: BtreeGistExtension = mock.Mock() CITextExtension = mock.Mock() CreateExtension = mock.Mock() - CryptoExtension = mock.Mock() HStoreExtension = mock.Mock() TrigramExtension = mock.Mock() UnaccentExtension = mock.Mock() + needs_crypto_extension = False +else: + needs_crypto_extension = not connection.features.is_postgresql_13 class Migration(migrations.Migration): @@ -30,7 +32,8 @@ class Migration(migrations.Migration): # Ensure CreateExtension quotes extension names by creating one with a # dash in its name. CreateExtension('uuid-ossp'), - CryptoExtension(), + # CryptoExtension is required for RandomUUID() on PostgreSQL < 13. + CryptoExtension() if needs_crypto_extension else mock.Mock(), HStoreExtension(), TrigramExtension(), UnaccentExtension(),