ORDER BY po polsku w Django i PostgreSQL na Dokku

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"')
    ]

Leave a Reply

Back to Top