- Ekstensi yang memungkinkan DB SQLite itu sendiri disematkan ke dalam tabel PostgreSQL sebagai tipe kolom SQLITE
- Dengan cara ini, multitenancy diselesaikan
- Membuat DB kosong dengan
empty_sqlite: CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)'));
- Dapat menjalankan kueri dengan fungsi
query_sqlite, dan melakukan insert/update dengan 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';
- Membaca kolom tertentu dengan fungsi
get_sqlite_text/get_sqlite_integer/get_sqlite_real: SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos');
- Ditulis dengan Rust + framework Pgrx
- Detail implementasi:
- Menyimpan DB sebagai
Vec<u8> yang dienkode dengan CBOR (Concise Binary Object Representation)
- Saat kueri dijalankan, DB dibuat sebagai file acak di folder /tmp. SQLite memuat file tersebut untuk menjalankan kueri, lalu mengembalikan hasilnya sebagai tabel satu baris yang berisi nilai yang dienkode JSON
5 komentar
WOW..
Ya ampun...
pgrx - Framework untuk mengembangkan ekstensi PostgreSQL dengan Rust
Ini memang ekstensi yang agak aneh, tapi saat membuat SaaS yang bisa diskalakan, rasanya mungkin bisa dipakai setidaknya ketika pengguna perlu menyematkan fungsi DB sederhana.
Komentar Hacker News
Sebagian besar sistem manajemen basis data relasional tidak mendukung record bersarang, dan SQL juga kekurangan kemampuan untuk membuat atau memanfaatkan tabel bersarang
Diusulkan ide untuk membungkus direktori database PostgreSQL dengan
tarlalu mengenkodenya sebagai blob biner di SQLiteMuncul pertanyaan tentang use case untuk ide ini
Ada pendapat bahwa kolom SQLite akan lebih unggul daripada kolom JSON di SQLite
Mekanisme file
/tmpterlihat seperti hack dan dipertanyakan apakah benar-benar perluVACUUM INTOuntuk memuat data blob binerJika menggunakan PostgreSQL, masalah multi-tenancy dapat diselesaikan melalui Row Level Security (RLS)
Kejahatan terhadap 1NF (Bentuk Normal Pertama)?
Ada keluhan tentang tidak adanya operator