0Pricing
SQL Academy · Lektion

Bereichs-, Listen- und Hash-Partitionierung

Wählen Sie die passende Partitionierungsstrategie: Bereich für Zeitreihen, Liste für Mandanten und Hash für gleichmäßige Verteilung.

Bereichs-, Listen- und Hash-Partitionierung ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Range-Partitionierung

Jede Partition deckt einen zusammenhängenden Wertebereich ab. Das ist bei Zeitreihen am häufigsten:

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_q1 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
  FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

Range-Grenzen sind halboffen

FROM ist inklusiv, TO ist exklusiv. Die Grenzen schließen sauber aneinander an — ohne Überschneidungen und ohne Lücken.

List-Partitionierung

Jede Partition enthält bestimmte Werte:

CREATE TABLE customers (
  id BIGSERIAL,
  country TEXT NOT NULL,
  name TEXT
) PARTITION BY LIST (country);

CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;

DEFAULT-Partition

Sie fängt Zeilen ab, die zu keiner anderen Partition passen. Ohne eine solche Partition schlagen INSERTs für nicht passende Zeilen fehl.

Hash-Partitionierung

Zeilen werden durch Hashing des Partitionsschlüssels verteilt. Das eignet sich, wenn Sie eine gleichmäßige Verteilung wünschen, aber keinen natürlichen Wertebereich oder keine natürliche Werteliste haben:

CREATE TABLE sessions (
  id UUID,
  user_id BIGINT,
  data JSONB
) PARTITION BY HASH (user_id);

CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);

Die passende Strategie auswählen

  • Range — Zeitreihen, monoton wachsende IDs
  • List — Mandanten, Länder, Hot-Tiers
  • Hash — wenn es keine natürliche Verzerrung gibt und Sie einfach Parallelität wünschen

Unterpartitionierung

Partitionen können selbst weiter partitioniert werden (mehrstufig):

CREATE TABLE events_2024 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
  PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.

Indizes auf partitionierten Tabellen

Indizes auf der übergeordneten Tabelle werden automatisch auf alle Partitionen übertragen. UNIQUE-Constraints müssen den Partitionsschlüssel enthalten:

CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.

ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.

Primärschlüssel und Partitionen

Der PRIMARY KEY einer partitionierten Tabelle muss die Partitionsspalte enthalten. Das ist eine grundlegende Einschränkung der deklarativen Partitionierung.

Partitionen hinzufügen und löschen

Günstige Vorgänge:

CREATE TABLE events_2024_q3 PARTITION OF events
  FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');

DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.

Automatische Partitionserstellung

Postgres erstellt zukünftige Partitionen nicht automatisch. Häufige Lösungen:

  • pg_partman-Extension — verwaltete monatliche Partitionen
  • Geplanter Job, der die nächste Partition mit CREATE anlegt

Fremdschlüssel

Fremdschlüssel auf eine partitionierte Tabelle benötigen PG 12+. Fremdschlüssel VON einer partitionierten Tabelle auf eine normale Tabelle funktionieren wie gewohnt.

Zusammenfassung

Drei Partitionierungsstrategien decken die meisten Fälle ab.

  • Range für Zeit- und sequenzielle Daten
  • List für diskrete Mengen
  • Hash für eine gleichmäßige Verteilung
  • Der Primärschlüssel muss die Partitionsspalte enthalten

Kurzer Check

Sie möchten eine sessions-Tabelle nach user_id partitionieren, mit gleichmäßiger Verteilung und ohne natürliche Sortierung. Welche Strategie eignet sich?

Häufig gestellte Fragen

Ist die Lektion „Bereichs-, Listen- und Hash-Partitionierung“ kostenlos?

Ja — der vollständige Text von „Bereichs-, Listen- und Hash-Partitionierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Bereichs-, Listen- und Hash-Partitionierung“?

Wählen Sie die passende Partitionierungsstrategie: Bereich für Zeitreihen, Liste für Mandanten und Hash für gleichmäßige Verteilung. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Bereichs-, Listen- und Hash-Partitionierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum partitionieren: Pruning und Wartung
  2. Bereichs-, Listen- und Hash-Partitionierung
  3. Partitionen abtrennen und anhängen
  4. Effiziente Abfragen über Partitionen hinweg
← Zurück zu SQL Academy