1from__future__importannotations 2 3fromtypingimportTYPE_CHECKING 4 5fromplain.models.backends.base.featuresimportBaseDatabaseFeatures 6 7ifTYPE_CHECKING: 8fromplain.models.backends.postgresql.baseimportPostgreSQLDatabaseWrapper 91011classDatabaseFeatures(BaseDatabaseFeatures):12# Type checker hint: connection is always PostgreSQLDatabaseWrapper in this class13connection:PostgreSQLDatabaseWrapper1415minimum_database_version=(12,)16allows_group_by_selected_pks=True17can_return_columns_from_insert=True18can_return_rows_from_bulk_insert=True19has_native_uuid_field=True20has_native_duration_field=True21has_native_json_field=True22can_defer_constraint_checks=True23has_select_for_update=True24has_select_for_update_nowait=True25has_select_for_update_of=True26has_select_for_update_skip_locked=True27has_select_for_no_key_update=True28supports_comments=True29supports_transactions=True30can_rollback_ddl=True31supports_combined_alters=True32supports_temporal_subtraction=True3334requires_casted_case_in_updates=True35supports_over_clause=True36only_supports_unbounded_with_preceding_and_following=True37supports_aggregate_filter_clause=True38supported_explain_formats={"JSON","TEXT","XML","YAML"}39supports_deferrable_unique_constraints=True40supports_update_conflicts=True41supports_update_conflicts_with_target=True42supports_covering_indexes=True43can_rename_index=True4445supports_unlimited_charfield=True