Aufschiebbare, eindeutige Einschränkung, bei der die Groß- und Kleinschreibung keine Rolle spielt

Ist es in PostgreSQL möglich, eine aufschiebbare eindeutige Einschränkung für eine Zeichenspalte zu erstellen, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird?

Nehmen wir die folgende Basistabelle an:

CREATE TABLE sample_table ( 
   my_column VARCHAR(100)
);

Wenn keine aufschiebbare Einschränkung erforderlich ist, müssen Sie lediglich einen eindeutigen Index mit einer Funktion erstellen, z.

CREATE UNIQUE INDEX my_unique_index ON sample_table(UPPER(my_column));

Für die verzögerte Einschränkungsprüfung muss die Einschränkung explizit erstellt werden, z.

ALTER TABLE sample_table 
 ADD CONSTRAINT my_unique_constraint UNIQUE(my_column)
 DEFERRABLE INITIALLY IMMEDIATE;

Und leider ist es nicht möglich, beliebige Funktionen in eindeutigen Einschränkungen zu verwenden.

Eine mögliche Problemumgehung wäre das Erstellen einer zusätzlichen Spalte mit demselben Inhalt wiemy_columnWird jedoch nach jeder Aktualisierung / Einfügung ein Großbuchstabe über einen Trigger aktualisiert, wird eine aufschiebbare eindeutige Einschränkung für diese künstliche Spalte erstellt. Dies klingt jedoch nach einem wirklich hässlichen Hack.

Alternativ sollte es möglich sein, zu verwendenCREATE CONSTRAINT TRIGGER und manuell auf Groß- und Kleinschreibung prüfen (ein regulärer Index wäre natürlich weiterhin erforderlich). Dies klingt für eine so einfache (und, wie ich nehme, beliebte) Anforderung etwas zu kompliziert.

Gibt es einen einfacheren und / oder eleganteren Weg, um diese Einschränkung zu umgehen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage