Show HN: pglite-fusion – SQLite in PostgreSQL-Tabellen einbetten
(github.com/frectonz)- Eine Erweiterung, mit der sich eine SQLite-DB selbst als
SQLITE-Spaltentyp in eine PostgreSQL-Tabelle einbetten lässt- Auf diese Weise wird Multitenancy gelöst
- Mit
empty_sqliteeine leere DB erzeugen:CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)')); - Abfragen mit der Funktion
query_sqlitemöglich, Inserts/Updates mitexecute_sqliteSELECT * FROM query_sqlite(database, 'SELECT * FROM todos');- `UPDATE people SET database = execute_sqlite(database, 'INSERT INTO todos VALUES (''solve multitenancy'')') WHERE name = 'frectonz';
- Bestimmte Spalten mit den Funktionen
get_sqlite_text/get_sqlite_integer/get_sqlite_realauslesen:SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos'); - Geschrieben mit Rust + dem Pgrx-Framework
- Implementierungsdetails:
- Die DB wird als CBOR-kodiertes
Vec<u8>gespeichert - Bei der Ausführung einer Abfrage wird sie als Zufallsdatei im Ordner
/tmperzeugt. SQLite lädt die Datei, führt die Abfrage aus und gibt das Ergebnis als Ein-Zeilen-Tabelle zurück, die JSON-kodierte Werte enthält
- Die DB wird als CBOR-kodiertes
5 Kommentare
WOW..
Mein Gott...
pgrx – ein Framework zur Entwicklung von PostgreSQL-Erweiterungen mit Rust
Es ist zwar eine irgendwie merkwürdige Erweiterung, aber beim Erstellen eines skalierbaren SaaS könnte sie vielleicht in Fällen nützlich sein, in denen Benutzer einfache DB-Funktionen einbetten müssen.
Hacker-News-Kommentare
Die meisten relationalen Datenbankmanagementsysteme unterstützen keine verschachtelten Datensätze, und auch SQL bietet nur unzureichende Möglichkeiten, verschachtelte Tabellen zu erstellen oder zu nutzen
Es wird die Idee vorgeschlagen, das PostgreSQL-Datenbankverzeichnis als
tarzu bündeln und in SQLite als binären Blob zu kodierenEs werden Fragen nach Anwendungsfällen für diese Idee aufgeworfen
Es gibt die Ansicht, dass SQLite-Spalten besser wären als JSON-Spalten in SQLite
Der
/tmp-Dateimechanismus wirkt wie ein Hack, und es wird bezweifelt, ob er wirklich nötig istVACUUM INTObinäre Blob-Daten ladenBei der Verwendung von PostgreSQL lässt sich das Multitenancy-Problem über Row Level Security (RLS) lösen
Ein Verbrechen gegen 1NF (erste Normalform)?
Es gibt Beschwerden darüber, dass Operatoren fehlen
DATABASE-Spalten