Cloud-Native-DB: Citus 13 bringt PostgreSQL 17 in verteilte Cluster-Umgebungen
Version 13 der Postgres-Erweiterung Citus stellt neue Query- und Optimizer-Funktionen aus PostgreSQL 17 auch fĂĽr verteilte Datenbank-Cluster bereit.
(Bild: Konstantin Yolshin/Shutterstock.com)
Das Entwicklungsteam von Citus Data hat Version 13 der Cloud-nativen Datenbank Citus vorgelegt. Als Open-Source-Erweiterung für Postgres stellt das neue Release den Funktionsumfang von PostgreSQL 17.2 bis in verteilte Datenbank-Cluster-Umgebungen bereit. In das Update sind Bugfixes eingeflossen, die sowohl Fehler wie Abstürze im Zusammenhang mit unsicheren Katalogzugriffen beheben, als auch Segmentierungsfehler in verteilten Prozeduren. Zu den wichtigen Neuerungen zählen vor allem aber Query- und Optimizer-Funktionen aus PostgreSQL 17.
Videos by heise
Erweiterte Syntax fĂĽr MERGE-Operationen
Bei der Datensynchronisation zwischen Ziel- und Quell-Tabellen erlaubt die SQL-Anweisung MERGE effizientes Kombinieren mehrerer Arbeitsschritte mit INSERT, UPDATE und DELETE. Seit Postgres 15 ist es dabei auch möglich, Aktionen für Zeilen zu definieren, die zwar in der Quelle, nicht aber Ziel vorhanden sind – mit der MERGE-Option WHEN NOT MATCHED BY TARGET. PostgreSQL 17 eröffnet darüber hinaus die Möglichkeit, mit Zeilen in der Ziel-Tabelle zu arbeiten, die nicht in der Quelle vorkommen, um verschiedene Update- und Datenladeprozesse zu vereinfachen. Die MERGE-Option WHEN NOT MATCHED BY SOURCE steht Citus-13-Anwendern ab sofort auch in verteilten Umgebungen zur Verfügung. Das folgende Listing aus dem Blog-Beitrag zur neuen Version zeigt dazu ein einfaches Beispiel für von Citus verwaltete Tabellen:
-- create and distribute the target and source tables
CREATE TABLE target_table (tid integer, balance float, val text);
CREATE TABLE source_table (sid integer, delta float);
SELECT create_distributed_table('target_table', 'tid');
SELECT create_distributed_table('source_table', 'sid');
-- populate the tables
INSERT INTO target_table SELECT id, id * 100, 'initial' FROM generate_series(1,5,2) AS id;
INSERT INTO source_table SELECT id, id * 10 FROM generate_series(1,4) AS id;
-- Use WHEN NOT MATCHED BY SOURCE
MERGE INTO target_table t
USING source_table s
ON t.tid = s.sid AND tid = 1
WHEN MATCHED THEN
UPDATE SET balance = balance + delta, val = val || ' updated by merge'
WHEN NOT MATCHED BY TARGET THEN
INSERT VALUES (sid, delta, 'inserted by merge')
WHEN NOT MATCHED BY SOURCE THEN
UPDATE SET val = val || ' not matched by source';
-- see the updated distributed target table
SELECT * FROM target_table ORDER BY tid;
tid | balance | val
-----+---------+-------------------------------
1 | 110 | initial updated by merge
2 | 20 | inserted by merge
3 | 30 | inserted by merge
3 | 300 | initial not matched by source
4 | 40 | inserted by merge
5 | 500 | initial not matched by source
(6 rows)
Citus übernimmt außerdem eine weitere wichtige Neuerung aus Postgres 17: verbesserten Umgang mit JSON-Daten. Die Funktion JSON_TABLE() konvertiert JSON-Daten in eine Standard-PostgreSQL-Tabelle, sodass Entwicklerinnen und Entwickler an Stelle des JSON-Formats die von SQL vertrauten relationalen Ansichten nutzen können.
Mehr Optionen fĂĽr verteilte partitionierte Tabellen
Speziell für die Arbeit mit verteilten partitionierten Tabellen liefert Citus 13 drei neue Optionen. Zum einen können Anwender nun mit CREATE TABLE ... USING eine Zugriffsmethode für eine partitionierte Tabelle definieren, die sich dann mittels der Citus-Signature-Funktion create_distributed_table() verteilen lässt. Darüber hinaus lässt sich der in Citus 11.2 eingeführte Support für Identity-Spalten jetzt ebenfalls in verteilten partitionierten Tabellen nutzen. Drittens ermöglicht Citus nun das Hinzufügen einer Ausschlussbeschränkung, indem es die SQL-Anweisung ALTER TABLE distributed_partitioned_table ADD CONSTRAINT ... an alle Knoten im Cluster weiterreicht.
Unter den weiteren Neuerungen in Citus 13 finden sich die ebenfalls auf Postgres 17 zurückgehenden EXPLAIN-Query-Optionen SERIALIZE und MEMORY. Mehr Details dazu sowie einen vollständigeren Überblick aller Änderungen in Citus 13 liefert der Blogbeitrag von Citus Data. Das Unternehmen gehört seit der Übernahmeankündigung Anfang 2019 zu Microsoft.
(map)