- 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_sqlite eine 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_sqlite möglich, Inserts/Updates mit execute_sqlite
SELECT * 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_real auslesen: 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
/tmp erzeugt. 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
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