Jeśli zakładamy polską bazę danych na PostgreSQL to warto na początku ustawić jej właściwy COLLATE, jednak jeśli mamy już bazę i nie chcemy jej zmieniać to możemy zaktualizować COLLATE tylko na jednej kolumnie, wcześniej jednak musimy generować locale w kontenerze i collate na bazie.
Zacznijmy od kontenera bazy danych:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ce6cb49f42a postgres:10.4 "docker-entrypoint.s…" 15 months ago Up About an hour 5432/tcp dokku.postgres.dev-db
$ docker exec -it dokku.postgres.dev-db bash
root@2ce6cb49f42a:/# apt-get update && apt-get install -y locales locales-all && locale-gen pl_PL.utf8
Teraz baza danych:
$ dokku postgres:connect dev-db
dev_db=# CREATE COLLATION "pl_PL" (locale = "pl_PL.utf8");
A na końcu dodajemy pustą migrację i uzupełniamy ją o alter table
:
# Generated by Django 2.1.5 on 2020-02-08 08:51
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('my_awesome_app', '0076_previous_migration'),
]
operations = [
migrations.RunSQL('ALTER TABLE my_awesome_app_article ALTER COLUMN title SET DATA TYPE character varying(500) COLLATE "pl_PL"')
]