Skip to Main Content

 

Auswahl  

Partitionierte Tabellen Beispiele in Postgres 

Postgres
Postgres
PG 13
25.11.19 (MP)
05.07.23(MP)
Postgres, Partitionierung

Passende Schulungen zum Thema

Postgres hat ja nun seit der Version 10 auch Partitionierung bei Tabellen im Einsatz und das natürlich wie immer kostenlos.
Derzeit werden die folgenden Partitionierungen unterstützt:

  • Range Partitionierung
  • List Partitionierung
  • Hash Partitionierung

Beispiel zu Range Partitionierung (ohne Primary Key):

CREATE TABLE emp (
    empno INT,
    ename VARCHAR(30),
    hiredate         date not null
) PARTITION BY RANGE (hiredate);

CREATE TABLE emp_p2016 PARTITION OF emp
FOR VALUES FROM ('2016-01-01') TO ('2017-01-01');

CREATE TABLE emp_y2017 PARTITION OF emp
FOR VALUES FROM ('2017-01-01') TO ('2018-01-01');

INSERT INTO emp (empno,ename,hiredate)
    VALUES (8000,'MARCO','2016-03-10');


Wenn Die Tabelle einen Primary beinhalten soll, muss die Partitionierungspalte im Key enthalten sein, sonst erhält man den Fehler:
FEHLER:  insufficient columns in PRIMARY KEY constraint definition
DETAIL:  PRIMARY KEY constraint on table "emp" lacks column "hiredate" which is part of the partition key.

CREATE TABLE emp (
    empno INT ,
    ename VARCHAR(30),
    hiredate         date not null,
    PRIMARY KEY(empno,hiredate)
) PARTITION BY RANGE (hiredate);


Beispiel zu LIst Partitionierung:

CREATE TABLE dept
( deptno  int,   
  dname   varchar(20),
  loc     varchar(20)  );

CREATE TABLE dept10 PARTITION OF dept FOR VALUES IN (10,12,14);
CREATE TABLE dept20 PARTITION OF dept FOR VALUES IN (20,22,24);
CREATE TABLE dept30 PARTITION OF dept FOR VALUES IN (30,32,34);
CREATE TABLE dept_def PARTITION OF dept DEFAULT;


In der optionalen Default Partition landen alle Einträge, die sonst in keine Partition passen.
Wenn Sie keine Default Partition besitzen und der Datensatz kann ich zugeordnet werden, bekommen Sie den Fehler:
FEHLER:  keine Partition von Relation »dept« für die Zeile gefunden
DETAIL:  Partitionierungsschlüssel der fehlgeschlagenen Zeile enthält (deptno) = (50).

Partitionen löschen:

DROP TABLE dept30;


Hash Partitionierung
Bei der Hash Partitionierung übernimmt Postgres die richtige Verteilung der Daten auf die Partitionen:

CREATE TABLE dept (
deptno         int primary key,
dname         VARCHAR(10),
loc         VARCHAR2(10)  )
partition by hash(deptno);

CREATE TABLE dept_1 PARTITION OF dept FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE dept_2 PARTITION OF dept FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE dept_3 PARTITION OF dept FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE dept_4 PARTITION OF dept FOR VALUES WITH (MODULUS 4, REMAINDER 3);

\d+ dept

Weitere Interessante Kurs-Tipps zum Thema

Postgres Backup einer Datenbank mit tar
Trigger Beispiele in Postgres

Besuchen Sie uns doch bei einer unsere über 50 Oracle Schulungen in München - Unterhaching, oder verfolgen Sie die Training per Videostreaming bequem vom Home Office oder Büro aus.