Migrering av databaser¶
Alla dessa operationer Àr tillgÀngliga frÄn modulen django.contrib.postgres.operations
.
Skapa tillÀgg med hjÀlp av migreringar¶
Du kan skapa ett PostgreSQL-tillÀgg i din databas med hjÀlp av en migreringsfil. Detta exempel skapar en hstore-förlÀngning, men samma principer gÀller för andra tillÀgg.
StÀll in hstore-tillÀgget i PostgreSQL före den första CreateModel
eller AddField
-operationen som involverar HStoreField
genom att lÀgga till en migrering med HStoreExtension
-operationen. Till exempel:
from django.contrib.postgres.operations import HStoreExtension
class Migration(migrations.Migration):
...
operations = [HStoreExtension(), ...]
Operationen hoppar över att lÀgga till tillÀgget om det redan finns.
För de flesta tillÀgg krÀver detta en databasanvÀndare med superanvÀndarrÀttigheter. Om Django-databasanvÀndaren inte har lÀmpliga privilegier mÄste du skapa tillÀgget utanför Django-migreringar med en anvÀndare som har dem. I sÄ fall ansluter du till din Django-databas och kör frÄgan CREATE EXTENSION IF NOT EXISTS hstore;
.
CreateExtension
¶
BloomExtension
¶
BtreeGinExtension
¶
BtreeGistExtension
¶
CITextExtension
¶
CryptoExtension
¶
HStoreExtension
¶
TrigramExtension
¶
UnaccentExtension
¶
Hantera kollationer med hjÀlp av migreringar¶
Om du behöver filtrera eller bestÀlla en kolumn med en viss kollationering som ditt operativsystem tillhandahÄller men PostgreSQL inte gör det, kan du hantera kollationer i din databas med hjÀlp av en migreringsfil. Dessa kollationer kan sedan anvÀndas med parametern db_collation
pÄ CharField
, TextField
, och deras underklasser.
Till exempel:, för att skapa en kollationering för tysk telefonkatalogbestÀllning:
from django.contrib.postgres.operations import CreateCollation
class Migration(migrations.Migration):
...
operations = [
CreateCollation(
"case_insensitive",
provider="icu",
locale="und-u-ks-level2",
deterministic=False,
),
...,
]
- class CreateCollation(name, locale, *, provider='libc', deterministic=True)[source]¶
Skapar en kollationering med de angivna
name
,locale
ochprovider
.SĂ€tt parametern
deterministic
tillFalse
för att skapa en icke-deterministisk kollationering, t.ex. för skiftlÀgesokÀnslig filtrering.
- class RemoveCollation(name, locale, *, provider='libc', deterministic=True)[source]¶
Tar bort de kollationer som heter
namn
.NĂ€r den reverseras skapar detta en kollationering med de angivna argumenten
locale
,provider
ochdeterministic
. DÀrför krÀvslocale
för att göra denna operation reversibel.
Samtidiga indexoperationer¶
PostgreSQL stöder alternativet CONCURRENTLY
till CREATE INDEX
och DROP INDEX
uttalanden för att lÀgga till och ta bort index utan att lÄsa ut skrivningar. Det hÀr alternativet Àr anvÀndbart för att lÀgga till eller ta bort ett index i en live produktionsdatabas.
- class AddIndexConcurrently(model_name, index)[source]¶
Som
AddIndex
, men skapar ett index med alternativetCONCURRENTLY
. Detta har nÄgra försiktighetsÄtgÀrder att vara medveten om nÀr du anvÀnder det hÀr alternativet, se `` PostgreSQL-dokumentationen för att bygga index samtidigt <https://www.postgresql.org/docs/current/ sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY>`_.
- class RemoveIndexConcurrently(model_name, name)[source]¶
Som
RemoveIndex
, men tar bort indexet med alternativetCONCURRENTLY
. Detta har nÄgra varningar att vara medvetna om nÀr du anvÀnder det hÀr alternativet, se PostgreSQL-dokumentationen.
Observera
Alternativet CONCURRENTLY
stöds inte inom en transaktion (se non-atomic migration <non-atomic-migrations>`).
LÀgga till begrÀnsningar utan att tvinga fram validering¶
PostgreSQL stöder alternativet `` INOT VALID`` med uttalandet `` ADD CONSTRAINT`` för att lÀgga till kontrollbegrÀnsningar utan att genomdriva validering pÄ befintliga rader. Det hÀr alternativet Àr anvÀndbart om du vill hoppa över den potentiellt lÄnga genomsökningen av tabellen för att verifiera att alla befintliga rader uppfyller begrÀnsningen.
Om du vill validera kontrollbegrÀnsningar som skapats med alternativet NOT VALID
vid en senare tidpunkt anvÀnder du operationen ValidateConstraint
.
Se âPostgreSQL-dokumentationen <https://www.postgresql.org/docs/current/ sql-altertable.html#SQL-ALTERTABLE-NOTES>`__ för mer information.
- class AddConstraintNotValid(model_name, constraint)[source]¶
Som
AddConstraint
, men undviker att validera begrÀnsningen pÄ befintliga rader.
- class ValidateConstraint(model_name, name)[source]¶
Skannar igenom tabellen och validerar den angivna kontrollbegrÀnsningen pÄ befintliga rader.
Observera
operationerna AddConstraintNotValid
och ValidateConstraint
bör utföras i tvÄ separata migreringar. Att utföra bÄda operationerna i samma atomiska migrering har samma effekt som AddConstraint
, medan att utföra dem i en enda icke-atomisk migrering kan lÀmna din databas i ett inkonsekvent tillstÄnd om operationen ValidateConstraint
misslyckas.