Fixed #32357 -- Dropped support for PostgreSQL 9.6 and PostGIS 2.3.
This commit is contained in:
parent
10d1261984
commit
5371342ed6
|
@ -179,7 +179,7 @@ class PostGISOperations(BaseSpatialOperations, DatabaseOperations):
|
||||||
raise ImproperlyConfigured(
|
raise ImproperlyConfigured(
|
||||||
'Cannot determine PostGIS version for database "%s" '
|
'Cannot determine PostGIS version for database "%s" '
|
||||||
'using command "SELECT postgis_lib_version()". '
|
'using command "SELECT postgis_lib_version()". '
|
||||||
'GeoDjango requires at least PostGIS version 2.3. '
|
'GeoDjango requires at least PostGIS version 2.4. '
|
||||||
'Was the database created from a spatial database '
|
'Was the database created from a spatial database '
|
||||||
'template?' % self.connection.settings_dict['NAME']
|
'template?' % self.connection.settings_dict['NAME']
|
||||||
)
|
)
|
||||||
|
|
|
@ -98,10 +98,6 @@ class BrinIndex(PostgresIndex):
|
||||||
kwargs['pages_per_range'] = self.pages_per_range
|
kwargs['pages_per_range'] = self.pages_per_range
|
||||||
return path, args, kwargs
|
return path, args, kwargs
|
||||||
|
|
||||||
def check_supported(self, schema_editor):
|
|
||||||
if self.autosummarize and not schema_editor.connection.features.has_brin_autosummarize:
|
|
||||||
raise NotSupportedError('BRIN option autosummarize requires PostgreSQL 10+.')
|
|
||||||
|
|
||||||
def get_with_params(self):
|
def get_with_params(self):
|
||||||
with_params = []
|
with_params = []
|
||||||
if self.autosummarize is not None:
|
if self.autosummarize is not None:
|
||||||
|
|
|
@ -196,11 +196,6 @@ class CollationOperation(Operation):
|
||||||
raise NotSupportedError(
|
raise NotSupportedError(
|
||||||
'Non-deterministic collations require PostgreSQL 12+.'
|
'Non-deterministic collations require PostgreSQL 12+.'
|
||||||
)
|
)
|
||||||
if (
|
|
||||||
self.provider != 'libc' and
|
|
||||||
not schema_editor.connection.features.supports_alternate_collation_providers
|
|
||||||
):
|
|
||||||
raise NotSupportedError('Non-libc providers require PostgreSQL 10+.')
|
|
||||||
args = {'locale': schema_editor.quote_name(self.locale)}
|
args = {'locale': schema_editor.quote_name(self.locale)}
|
||||||
if self.provider != 'libc':
|
if self.provider != 'libc':
|
||||||
args['provider'] = schema_editor.quote_name(self.provider)
|
args['provider'] = schema_editor.quote_name(self.provider)
|
||||||
|
|
|
@ -58,6 +58,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||||
supports_deferrable_unique_constraints = True
|
supports_deferrable_unique_constraints = True
|
||||||
has_json_operators = True
|
has_json_operators = True
|
||||||
json_key_contains_list_matching_requires_list = True
|
json_key_contains_list_matching_requires_list = True
|
||||||
|
test_collations = {
|
||||||
|
'non_default': 'sv-x-icu',
|
||||||
|
'swedish_ci': 'sv-x-icu',
|
||||||
|
}
|
||||||
|
|
||||||
django_test_skips = {
|
django_test_skips = {
|
||||||
'opclasses are PostgreSQL only.': {
|
'opclasses are PostgreSQL only.': {
|
||||||
|
@ -65,16 +69,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@cached_property
|
|
||||||
def test_collations(self):
|
|
||||||
# PostgreSQL < 10 doesn't support ICU collations.
|
|
||||||
if self.is_postgresql_10:
|
|
||||||
return {
|
|
||||||
'non_default': 'sv-x-icu',
|
|
||||||
'swedish_ci': 'sv-x-icu',
|
|
||||||
}
|
|
||||||
return {}
|
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def introspected_field_types(self):
|
def introspected_field_types(self):
|
||||||
return {
|
return {
|
||||||
|
@ -84,10 +78,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||||
'PositiveSmallIntegerField': 'SmallIntegerField',
|
'PositiveSmallIntegerField': 'SmallIntegerField',
|
||||||
}
|
}
|
||||||
|
|
||||||
@cached_property
|
|
||||||
def is_postgresql_10(self):
|
|
||||||
return self.connection.pg_version >= 100000
|
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def is_postgresql_11(self):
|
def is_postgresql_11(self):
|
||||||
return self.connection.pg_version >= 110000
|
return self.connection.pg_version >= 110000
|
||||||
|
@ -100,10 +90,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||||
def is_postgresql_13(self):
|
def is_postgresql_13(self):
|
||||||
return self.connection.pg_version >= 130000
|
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'))
|
has_websearch_to_tsquery = property(operator.attrgetter('is_postgresql_11'))
|
||||||
supports_table_partitions = property(operator.attrgetter('is_postgresql_10'))
|
|
||||||
supports_covering_indexes = property(operator.attrgetter('is_postgresql_11'))
|
supports_covering_indexes = property(operator.attrgetter('is_postgresql_11'))
|
||||||
supports_covering_gist_indexes = property(operator.attrgetter('is_postgresql_12'))
|
supports_covering_gist_indexes = property(operator.attrgetter('is_postgresql_12'))
|
||||||
supports_non_deterministic_collations = property(operator.attrgetter('is_postgresql_12'))
|
supports_non_deterministic_collations = property(operator.attrgetter('is_postgresql_12'))
|
||||||
supports_alternate_collation_providers = property(operator.attrgetter('is_postgresql_10'))
|
|
||||||
|
|
|
@ -48,13 +48,13 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
|
||||||
"""Return a list of table and view names in the current database."""
|
"""Return a list of table and view names in the current database."""
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
SELECT c.relname,
|
SELECT c.relname,
|
||||||
CASE WHEN {} THEN 'p' WHEN c.relkind IN ('m', 'v') THEN 'v' ELSE 't' END
|
CASE WHEN c.relispartition THEN 'p' WHEN c.relkind IN ('m', 'v') THEN 'v' ELSE 't' END
|
||||||
FROM pg_catalog.pg_class c
|
FROM pg_catalog.pg_class c
|
||||||
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
||||||
WHERE c.relkind IN ('f', 'm', 'p', 'r', 'v')
|
WHERE c.relkind IN ('f', 'm', 'p', 'r', 'v')
|
||||||
AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
|
AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
|
||||||
AND pg_catalog.pg_table_is_visible(c.oid)
|
AND pg_catalog.pg_table_is_visible(c.oid)
|
||||||
""".format('c.relispartition' if self.connection.features.supports_table_partitions else 'FALSE'))
|
""")
|
||||||
return [TableInfo(*row) for row in cursor.fetchall() if row[0] not in self.ignored_tables]
|
return [TableInfo(*row) for row in cursor.fetchall() if row[0] not in self.ignored_tables]
|
||||||
|
|
||||||
def get_table_description(self, cursor, table_name):
|
def get_table_description(self, cursor, table_name):
|
||||||
|
|
|
@ -12,7 +12,7 @@ Program Description Required
|
||||||
`PROJ`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 6.x, 5.x, 4.x
|
`PROJ`_ Cartographic Projections library Yes (PostgreSQL and SQLite only) 6.x, 5.x, 4.x
|
||||||
:doc:`GDAL <../gdal>` Geospatial Data Abstraction Library Yes 3.1, 3.0, 2.4, 2.3, 2.2, 2.1, 2.0
|
:doc:`GDAL <../gdal>` Geospatial Data Abstraction Library Yes 3.1, 3.0, 2.4, 2.3, 2.2, 2.1, 2.0
|
||||||
:doc:`GeoIP <../geoip2>` IP-based geolocation library No 2
|
:doc:`GeoIP <../geoip2>` IP-based geolocation library No 2
|
||||||
`PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 3.0, 2.5, 2.4, 2.3
|
`PostGIS`__ Spatial extensions for PostgreSQL Yes (PostgreSQL only) 3.0, 2.5, 2.4
|
||||||
`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 4.3
|
`SpatiaLite`__ Spatial extensions for SQLite Yes (SQLite only) 4.3
|
||||||
======================== ==================================== ================================ ===================================
|
======================== ==================================== ================================ ===================================
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ totally fine with GeoDjango. Your mileage may vary.
|
||||||
GDAL 2.4.0 2018-12
|
GDAL 2.4.0 2018-12
|
||||||
GDAL 3.0.0 2019-05
|
GDAL 3.0.0 2019-05
|
||||||
GDAL 3.1.0 2020-05-07
|
GDAL 3.1.0 2020-05-07
|
||||||
PostGIS 2.3.0 2016-09-26
|
|
||||||
PostGIS 2.4.0 2017-09-30
|
PostGIS 2.4.0 2017-09-30
|
||||||
PostGIS 2.5.0 2018-09-23
|
PostGIS 2.5.0 2018-09-23
|
||||||
PostGIS 3.0.0 2019-10-20
|
PostGIS 3.0.0 2019-10-20
|
||||||
|
|
|
@ -58,7 +58,7 @@ supported versions, and any notes for each of the supported database backends:
|
||||||
================== ============================== ================== =========================================
|
================== ============================== ================== =========================================
|
||||||
Database Library Requirements Supported Versions Notes
|
Database Library Requirements Supported Versions Notes
|
||||||
================== ============================== ================== =========================================
|
================== ============================== ================== =========================================
|
||||||
PostgreSQL GEOS, GDAL, PROJ, PostGIS 9.6+ Requires PostGIS.
|
PostgreSQL GEOS, GDAL, PROJ, PostGIS 10+ Requires PostGIS.
|
||||||
MySQL GEOS, GDAL 5.7+ :ref:`Limited functionality <mysql-spatial-limitations>`.
|
MySQL GEOS, GDAL 5.7+ :ref:`Limited functionality <mysql-spatial-limitations>`.
|
||||||
Oracle GEOS, GDAL 12.2+ XE not supported.
|
Oracle GEOS, GDAL 12.2+ XE not supported.
|
||||||
SQLite GEOS, GDAL, PROJ, SpatiaLite 3.9.0+ Requires SpatiaLite 4.3+
|
SQLite GEOS, GDAL, PROJ, SpatiaLite 3.9.0+ Requires SpatiaLite 4.3+
|
||||||
|
@ -347,11 +347,11 @@ running macOS. Because MacPorts still builds the software from source,
|
||||||
|
|
||||||
Summary::
|
Summary::
|
||||||
|
|
||||||
$ sudo port install postgresql93-server
|
$ sudo port install postgresql13-server
|
||||||
$ sudo port install geos
|
$ sudo port install geos
|
||||||
$ sudo port install proj
|
$ sudo port install proj6
|
||||||
$ sudo port install postgis
|
$ sudo port install postgis3
|
||||||
$ sudo port install gdal +geos
|
$ sudo port install gdal
|
||||||
$ sudo port install libgeoip
|
$ sudo port install libgeoip
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
@ -359,12 +359,12 @@ Summary::
|
||||||
You will also have to modify the ``PATH`` in your ``.profile`` so
|
You will also have to modify the ``PATH`` in your ``.profile`` so
|
||||||
that the MacPorts programs are accessible from the command-line::
|
that the MacPorts programs are accessible from the command-line::
|
||||||
|
|
||||||
export PATH=/opt/local/bin:/opt/local/lib/postgresql93/bin
|
export PATH=/opt/local/bin:/opt/local/lib/postgresql13/bin
|
||||||
|
|
||||||
In addition, add the ``DYLD_FALLBACK_LIBRARY_PATH`` setting so that
|
In addition, add the ``DYLD_FALLBACK_LIBRARY_PATH`` setting so that
|
||||||
the libraries can be found by Python::
|
the libraries can be found by Python::
|
||||||
|
|
||||||
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql93
|
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql13
|
||||||
|
|
||||||
__ https://www.macports.org/
|
__ https://www.macports.org/
|
||||||
|
|
||||||
|
|
|
@ -66,10 +66,10 @@ Managing the database
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
To administer the database, you can either use the pgAdmin III program
|
To administer the database, you can either use the pgAdmin III program
|
||||||
(:menuselection:`Start --> PostgreSQL 9.x --> pgAdmin III`) or the
|
(:menuselection:`Start --> PostgreSQL X --> pgAdmin III`) or the SQL Shell
|
||||||
SQL Shell (:menuselection:`Start --> PostgreSQL 9.x --> SQL Shell`).
|
(:menuselection:`Start --> PostgreSQL X --> SQL Shell`). For example, to create
|
||||||
For example, to create a ``geodjango`` spatial database and user, the following
|
a ``geodjango`` spatial database and user, the following may be executed from
|
||||||
may be executed from the SQL Shell as the ``postgres`` user::
|
the SQL Shell as the ``postgres`` user::
|
||||||
|
|
||||||
postgres# CREATE USER geodjango PASSWORD 'my_passwd';
|
postgres# CREATE USER geodjango PASSWORD 'my_passwd';
|
||||||
postgres# CREATE DATABASE geodjango OWNER geodjango;
|
postgres# CREATE DATABASE geodjango OWNER geodjango;
|
||||||
|
|
|
@ -159,8 +159,6 @@ For example, to create a collation for German phone book ordering::
|
||||||
|
|
||||||
.. admonition:: Restrictions
|
.. admonition:: Restrictions
|
||||||
|
|
||||||
PostgreSQL 9.6 only supports the ``'libc'`` provider.
|
|
||||||
|
|
||||||
Non-deterministic collations are supported only on PostgreSQL 12+.
|
Non-deterministic collations are supported only on PostgreSQL 12+.
|
||||||
|
|
||||||
Concurrent index operations
|
Concurrent index operations
|
||||||
|
|
|
@ -103,7 +103,7 @@ below for information on how to set up your database correctly.
|
||||||
PostgreSQL notes
|
PostgreSQL notes
|
||||||
================
|
================
|
||||||
|
|
||||||
Django supports PostgreSQL 9.6 and higher. `psycopg2`_ 2.5.4 or higher is
|
Django supports PostgreSQL 10 and higher. `psycopg2`_ 2.5.4 or higher is
|
||||||
required, though the latest release is recommended.
|
required, though the latest release is recommended.
|
||||||
|
|
||||||
.. _psycopg2: https://www.psycopg.org/
|
.. _psycopg2: https://www.psycopg.org/
|
||||||
|
|
|
@ -18,8 +18,8 @@ able to store certain characters in the database, and information will be lost.
|
||||||
* MySQL users, refer to the `MySQL manual`_ for details on how to set or alter
|
* MySQL users, refer to the `MySQL manual`_ for details on how to set or alter
|
||||||
the database character set encoding.
|
the database character set encoding.
|
||||||
|
|
||||||
* PostgreSQL users, refer to the `PostgreSQL manual`_ (section 22.3.2 in
|
* PostgreSQL users, refer to the `PostgreSQL manual`_ for details on creating
|
||||||
PostgreSQL 9) for details on creating databases with the correct encoding.
|
databases with the correct encoding.
|
||||||
|
|
||||||
* Oracle users, refer to the `Oracle manual`_ for details on how to set
|
* Oracle users, refer to the `Oracle manual`_ for details on how to set
|
||||||
(`section 2`_) or alter (`section 11`_) the database character set encoding.
|
(`section 2`_) or alter (`section 11`_) the database character set encoding.
|
||||||
|
@ -28,7 +28,7 @@ able to store certain characters in the database, and information will be lost.
|
||||||
for internal encoding.
|
for internal encoding.
|
||||||
|
|
||||||
.. _MySQL manual: https://dev.mysql.com/doc/refman/en/charset-database.html
|
.. _MySQL manual: https://dev.mysql.com/doc/refman/en/charset-database.html
|
||||||
.. _PostgreSQL manual: https://www.postgresql.org/docs/current/multibyte.html
|
.. _PostgreSQL manual: https://www.postgresql.org/docs/current/multibyte.html#id-1.6.10.5.6
|
||||||
.. _Oracle manual: https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/index.html
|
.. _Oracle manual: https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/index.html
|
||||||
.. _section 2: https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/choosing-character-set.html
|
.. _section 2: https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/choosing-character-set.html
|
||||||
.. _section 11: https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/character-set-migration.html
|
.. _section 11: https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/character-set-migration.html
|
||||||
|
|
|
@ -224,6 +224,17 @@ backends.
|
||||||
|
|
||||||
* ...
|
* ...
|
||||||
|
|
||||||
|
:mod:`django.contrib.gis`
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
* Support for PostGIS 2.3 is removed.
|
||||||
|
|
||||||
|
Dropped support for PostgreSQL 9.6
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Upstream support for PostgreSQL 9.6 ends in November 2021. Django 4.0 supports
|
||||||
|
PostgreSQL 10 and higher.
|
||||||
|
|
||||||
Miscellaneous
|
Miscellaneous
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|
|
@ -399,7 +399,6 @@ class InspectDBTransactionalTests(TransactionTestCase):
|
||||||
cursor.execute('DROP MATERIALIZED VIEW inspectdb_people_materialized')
|
cursor.execute('DROP MATERIALIZED VIEW inspectdb_people_materialized')
|
||||||
|
|
||||||
@skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific SQL')
|
@skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific SQL')
|
||||||
@skipUnlessDBFeature('supports_table_partitions')
|
|
||||||
def test_include_partitions(self):
|
def test_include_partitions(self):
|
||||||
"""inspectdb --include-partitions creates models for partitions."""
|
"""inspectdb --include-partitions creates models for partitions."""
|
||||||
with connection.cursor() as cursor:
|
with connection.cursor() as cursor:
|
||||||
|
|
|
@ -345,7 +345,6 @@ class SchemaTests(PostgreSQLTestCase):
|
||||||
editor.remove_index(CharFieldModel, index)
|
editor.remove_index(CharFieldModel, index)
|
||||||
self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
|
self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
|
||||||
|
|
||||||
@skipUnlessDBFeature('has_brin_autosummarize')
|
|
||||||
def test_brin_parameters(self):
|
def test_brin_parameters(self):
|
||||||
index_name = 'char_field_brin_params'
|
index_name = 'char_field_brin_params'
|
||||||
index = BrinIndex(fields=['field'], name=index_name, autosummarize=True)
|
index = BrinIndex(fields=['field'], name=index_name, autosummarize=True)
|
||||||
|
@ -358,15 +357,6 @@ class SchemaTests(PostgreSQLTestCase):
|
||||||
editor.remove_index(CharFieldModel, index)
|
editor.remove_index(CharFieldModel, index)
|
||||||
self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
|
self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
|
||||||
|
|
||||||
def test_brin_autosummarize_not_supported(self):
|
|
||||||
index_name = 'brin_options_exception'
|
|
||||||
index = BrinIndex(fields=['field'], name=index_name, autosummarize=True)
|
|
||||||
with self.assertRaisesMessage(NotSupportedError, 'BRIN option autosummarize requires PostgreSQL 10+.'):
|
|
||||||
with mock.patch('django.db.backends.postgresql.features.DatabaseFeatures.has_brin_autosummarize', False):
|
|
||||||
with connection.schema_editor() as editor:
|
|
||||||
editor.add_index(CharFieldModel, index)
|
|
||||||
self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
|
|
||||||
|
|
||||||
def test_btree_index(self):
|
def test_btree_index(self):
|
||||||
# Ensure the table is there and doesn't have an index.
|
# Ensure the table is there and doesn't have an index.
|
||||||
self.assertNotIn('field', self.get_constraints(CharFieldModel._meta.db_table))
|
self.assertNotIn('field', self.get_constraints(CharFieldModel._meta.db_table))
|
||||||
|
|
|
@ -298,7 +298,6 @@ class CreateCollationTests(PostgreSQLTestCase):
|
||||||
'deterministic': False,
|
'deterministic': False,
|
||||||
})
|
})
|
||||||
|
|
||||||
@skipUnlessDBFeature('supports_alternate_collation_providers')
|
|
||||||
def test_create_collation_alternate_provider(self):
|
def test_create_collation_alternate_provider(self):
|
||||||
operation = CreateCollation(
|
operation = CreateCollation(
|
||||||
'german_phonebook_test',
|
'german_phonebook_test',
|
||||||
|
@ -339,24 +338,6 @@ class CreateCollationTests(PostgreSQLTestCase):
|
||||||
with self.assertRaisesMessage(NotSupportedError, msg):
|
with self.assertRaisesMessage(NotSupportedError, msg):
|
||||||
operation.database_forwards(self.app_label, editor, project_state, new_state)
|
operation.database_forwards(self.app_label, editor, project_state, new_state)
|
||||||
|
|
||||||
def test_collation_with_icu_provider_raises_error(self):
|
|
||||||
operation = CreateCollation(
|
|
||||||
'german_phonebook',
|
|
||||||
provider='icu',
|
|
||||||
locale='de-u-co-phonebk',
|
|
||||||
)
|
|
||||||
project_state = ProjectState()
|
|
||||||
new_state = project_state.clone()
|
|
||||||
msg = 'Non-libc providers require PostgreSQL 10+.'
|
|
||||||
with connection.schema_editor(atomic=False) as editor:
|
|
||||||
with mock.patch(
|
|
||||||
'django.db.backends.postgresql.features.DatabaseFeatures.'
|
|
||||||
'supports_alternate_collation_providers',
|
|
||||||
False,
|
|
||||||
):
|
|
||||||
with self.assertRaisesMessage(NotSupportedError, msg):
|
|
||||||
operation.database_forwards(self.app_label, editor, project_state, new_state)
|
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific tests.')
|
@unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific tests.')
|
||||||
class RemoveCollationTests(PostgreSQLTestCase):
|
class RemoveCollationTests(PostgreSQLTestCase):
|
||||||
|
|
|
@ -52,9 +52,8 @@ class ExplainTests(TestCase):
|
||||||
{'costs': False, 'buffers': True, 'analyze': True},
|
{'costs': False, 'buffers': True, 'analyze': True},
|
||||||
{'verbose': True, 'timing': True, 'analyze': True},
|
{'verbose': True, 'timing': True, 'analyze': True},
|
||||||
{'verbose': False, 'timing': False, 'analyze': True},
|
{'verbose': False, 'timing': False, 'analyze': True},
|
||||||
|
{'summary': True},
|
||||||
]
|
]
|
||||||
if connection.features.is_postgresql_10:
|
|
||||||
test_options.append({'summary': True})
|
|
||||||
if connection.features.is_postgresql_12:
|
if connection.features.is_postgresql_12:
|
||||||
test_options.append({'settings': True})
|
test_options.append({'settings': True})
|
||||||
if connection.features.is_postgresql_13:
|
if connection.features.is_postgresql_13:
|
||||||
|
|
Loading…
Reference in New Issue