Wie weiß ich, ob meine PostgreSQL-server mit dem Gebietsschema "C"?
Ich versuche zur Optimierung meiner PostgreSQL-8.3 DB-Tabellen zu den besten meiner Fähigkeit, und ich bin mir nicht sicher, ob ich die benutzen müssen varchar_pattern_ops
für bestimmte Spalten, in denen ich performe ein LIKE
gegen die ersten N Zeichen einer Zeichenkette. Nach diese Dokumentation, die Verwendung von xxx_pattern_ops
ist nur dann notwendig, "...wenn der server nicht den standard - " C "locale".
Kann mir jemand erklären, was das bedeutet? Wie überprüfe ich, was meine locale Datenbank?
InformationsquelleAutor Matt Huggins | 2009-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Derzeit einige locale [ docs ] - support kann nur eingestellt werden bei initdb Zeit, aber ich denke, das eine relevante
_pattern_ops
kann geändert werden über SET zur Laufzeit, LC_COLLATE. Sehen Sie die set-Werte, die Sie verwenden können, die ZEIGEN Befehl.Beispiel:
_pattern_ops
Indizes sind sinnvoll bei Spalten, verwenden Sie pattern-matching-Konstrukte, wieLIKE
oder regexps. Sie müssen noch immer einen regelmäßigen index (ohne_pattern_ops
) zu tun, die Gleichheit suchen, die auf einen index. Also, nehmen Sie all dies berücksichtigt wird, um zu sehen, ob Sie brauchen, solcher Indizes auf deinen Tabellen.Über das, was Gebietsschema ist, es ist ein Satz von Regeln über den Charakter der Bestellung, Formatierung und ähnliche Dinge, die je nach Sprache/Land auf einer anderen Sprache/Land. Zum Beispiel wird das Gebietsschema fr_CA (Französisch in Kanada) vielleicht haben einige verschiedene Sortier-Regeln (bzw. der Art und Weise der Anzeige von zahlen und so weiter) als en_CA (Englisch in Kanada.). Das standard-Gebietsschema "C" ist die POSIX-standards-konforme Standard-Gebietsschema. Nur strikten ASCII-Zeichen sind gültig, und die Regeln der Bestellung und Formatierung sind meist diejenigen, die von en_US (amerikanisches Englisch)
Sie müssen zum erstellen solcher Indizes nur, wenn die Kriterien gelten (pattern-matching über den Spalten). Siehe meine edits.
LC_COLLATE: derzeit werden diese parameter können angezeigt, aber nicht eingestellt werden, weil die Einstellung bestimmt, die bei der Datenbankerstellung.
InformationsquelleAutor Vinko Vrsalovic
psql -l
laut Handbuch
Beispiel-Ausgabe:
\l
wenn Sie bereits eine psql-Sitzung zu öffnen.InformationsquelleAutor Pavel Korshikov
Wenn du hast die option...
Könnten Sie neu erstellen der Datenbank-cluster die mit der C-locale.
Du musst die locale initdb wenn initialisieren Ihre Postgres-Instanz.
Können Sie dies tun, unabhängig davon, was der server die default-oder Benutzer-Gebietsschema ist.
Das ist ein server-administration-Befehl jedoch nicht ein Datenbank-schema-Designer Aufgabe. Das cluster enthält alle Datenbanken auf dem server, nicht nur die, die Sie sind, zu optimieren.
Schafft es eine Marke neue cluster, und nicht migrieren Ihre vorhandenen Datenbanken oder Daten. Das wäre zusätzliche Arbeit.
Außerdem, wenn Sie in einer position, wo Sie können erstellen Sie einen neuen cluster als eine option, sollten Sie wirklich in Betracht ziehen mit PostgreSQL 8.4 statt, die pro-Datenbank-Gebietsschemas, angegeben in der CREATE DATABASE-Anweisung.
InformationsquelleAutor Stephen Denne
Gibt es auch eine andere Möglichkeit (vorausgesetzt, Sie wollen, um Sie zu überprüfen, aber nicht verändern):
Überprüfen Sie die Datei /var/lib/postgres/data/postgresql.conf
Folgende Zeilen müssen gefunden werden:
InformationsquelleAutor pawos
OK, aus meiner perusings, es scheint, dass diese erste Einstellung
initdb --locale=xxx
grundsätzlich gibt das "default" locale für alle-Datenbank, die Sie erstellen, danach (d.h. es gibt die Einstellungen für template1", die die Standard-Vorlage). Sie können neue Datenbanken erstellen mit einem anderen Gebietsschema wie diese:
Locale anders ist als Codierung, können Sie manuell angeben und/oder encoding:
Wenn Sie möchten, um manuell zu rufen.
Grundsätzlich, wenn Sie nicht angegeben ist, verwendet das system die Standard -, die fast nie ein "C".
Also, wenn Ihr
show LC_COLLATE
gibt etwas anderes als "C" oder "POSIX" dann sind Sie nicht mit derstandard C locale
und Sie müssen angeben, dass die xxx_pattern_ops für Ihre Indizes. Beachten Sie auch die VORBEHALT, dass, wenn Sie wollen, verwenden Sie die <, <=, > oder >= Operatoren, die Sie benötigen, und erstellen Sie eine zweite index-ohne die xxx_pattern_ops Flagge (es sei denn, Sie verwenden die standard-C-locale, die auf Ihre Datenbank, die selten ist...). Für nur == undLIKE
(etc.) dann brauchen Sie nicht einen zweiten index. Wenn Sie nicht brauchenLIKE
dann brauchen Sie nicht den index mit xxx_pattern_ops, möglicherweise, auch.Selbst wenn Ihre Indizes definiert sind, zu sammeln und mit den "default" - wie
Dies ist nicht genug, es sei denn, die Standardeinstellung ist "C" (oder POSIX, der gleiche) die Sortierung, kann es nicht verwendet werden für Muster, wie
LIKE 'ABC%'
. Man braucht so etwas wie dieses:InformationsquelleAutor rogerdpack