- Extensão que permite incorporar o próprio banco de dados SQLite em tabelas PostgreSQL por meio do tipo de coluna SQLITE
- Resolve multitenancy dessa forma
- Cria um banco vazio com
empty_sqlite: CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)'));
- É possível consultar com a função
query_sqlite e fazer insert/update com 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';
- Lê colunas específicas com as funções
get_sqlite_text/get_sqlite_integer/get_sqlite_real: SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos');
- Escrito com Rust + framework Pgrx
- Detalhes de implementação:
- Armazena o banco como
Vec<u8> codificado em CBOR (Concise Binary Object Representation)
- Ao executar a consulta, cria um arquivo aleatório na pasta /tmp. O SQLite carrega o arquivo, executa a consulta e retorna o resultado como uma tabela de linha única contendo valores codificados em JSON
5 comentários
Uau..
Meu Deus...
pgrx - framework para desenvolver extensões do PostgreSQL com Rust
É uma extensão meio estranha, mas acho que talvez dê para usar em casos como ao criar um SaaS escalável e o usuário precisar incorporar funções simples de banco de dados.
Comentários do Hacker News
A maioria dos sistemas de gerenciamento de bancos de dados relacionais não oferece suporte a registros aninhados, e o SQL também carece de recursos para criar ou utilizar tabelas aninhadas
Foi proposta a ideia de empacotar o diretório do banco de dados PostgreSQL em um
tare codificá-lo como um blob binário no SQLiteLevantaram dúvidas sobre os casos de uso dessa ideia
Há a opinião de que uma coluna SQLite seria superior a uma coluna JSON no SQLite
O mecanismo de arquivo em
/tmpparece uma gambiarra, e há dúvidas se ele é realmente necessárioVACUUM INTOpara carregar os dados do blob binárioNo caso de uso do PostgreSQL, é possível resolver problemas de multitenancy com Row Level Security (RLS)
Crime contra a 1NF (Primeira Forma Normal)?
Reclamação sobre a ausência de operadores
DATABASE, além de uma sintaxe de operadores peculiar para isso