# Show HN: pglite-fusion - PostgreSQL 테이블에 SQLite 임베딩하기

> Clean Markdown view of GeekNews topic #17858. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17858](https://news.hada.io/topic?id=17858)
- GeekNews Markdown: [https://news.hada.io/topic/17858.md](https://news.hada.io/topic/17858.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-20T09:26:09+09:00
- Updated: 2024-11-20T09:26:09+09:00
- Original source: [github.com/frectonz](https://github.com/frectonz/pglite-fusion)
- Points: 3
- Comments: 5

## Topic Body

- PostgreSQL 테이블에 SQLITE 컬럼 타입으로 SQLite DB자체를 임베딩 하게 해주는 확장   
  - 이 방식으로 multitenancy를 해결   
- `empty_sqlite` 로 빈 DB를 생성 : `CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)'));`  
- `query_sqlite` 함수로 쿼리 가능, `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';  
- `get_sqlite_text/get_sqlite_integer/get_sqlite_real` 함수로 특정 컬럼 읽어오기 : `SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos');`  
- Rust + Pgrx 프레임워크로 작성됨   
- 구현 상세 :   
  - CBOR (Concise Binary Object Representation) 인코딩된 `Vec&lt;u8&gt;`로 DB를 저장  
  - 쿼리 실행 시 /tmp 폴더에 랜덤파일로 생성. SQLite가 파일을 로딩하여 쿼리 실행하고 결과를 JSON 인코딩된 값이 들어있는 싱글로우 테이블로 리턴

## Comments



### Comment 31573

- Author: sms8377
- Created: 2024-11-22T08:13:36+09:00
- Points: 1

WOW..

### Comment 31536

- Author: seunghaekim
- Created: 2024-11-20T15:48:50+09:00
- Points: 2

맙소사...

### Comment 31523

- Author: xguru
- Created: 2024-11-20T10:12:22+09:00
- Points: 1

[pgrx - Rust로 PostgreSQL 확장을 개발하는 프레임워크](https://news.hada.io/topic?id=17864)

### Comment 31515

- Author: xguru
- Created: 2024-11-20T09:32:32+09:00
- Points: 1

뭔가 이상한 확장이긴 한데, 확장 가능한 SaaS를 만들면서 사용자가 간단히 DB 기능을 임베딩 해야하거나 할때 정도는 쓸 수 있지 않을까 생각도 들고 하네요.

### Comment 31514

- Author: neo
- Created: 2024-11-20T09:26:10+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42182146)   
- 대부분의 관계형 데이터베이스 관리 시스템은 중첩된 레코드를 지원하지 않으며, SQL도 중첩 테이블을 생성하거나 활용할 수 있는 기능이 부족함  
  - "그런 태도로는 안 됨"이라는 의견이 있음  
  
- PostgreSQL 데이터베이스 디렉토리를 tar로 묶고 SQLite에 이진 블롭으로 인코딩하는 아이디어 제안  
  - 실용적이거나 유용하지는 않지만 SQL 데이터베이스를 중첩하는 개념임  
  
- 이 아이디어의 사용 사례에 대한 의문 제기  
  - 일반적인 제품에서 데이터베이스 스키마를 설계할 때 사용하기 어려움  
  - 하이브리드 애플리케이션에서 로컬 사용자 데이터를 계정 정보와 직접 백업하는 용도인지 궁금함  
  
- SQLite의 JSON 열보다 SQLite 열이 더 우수할 것이라는 의견  
  - JSON 연산자는 별도의 쿼리 언어를 배워야 하고 제한적임  
  
- `/tmp` 파일 메커니즘이 해킹처럼 보이며 꼭 필요한지 의문  
  - SQLite 인메모리 데이터베이스를 생성하고 백업 API나 VACUUM INTO를 사용해 이진 블롭 데이터를 로드하는 방법이 가능할 수 있음  
  
- PostgreSQL을 사용하는 경우, Row Level Security(RLS)을 통해 멀티 테넌시 문제 해결 가능  
  - 각 테이블에 테넌트 ID 열을 추가하고 하나의 테넌트만 데이터를 볼 수 있는 정책을 설정하는 것이 매우 쉬움  
  
- 1NF(제1정규형) 범죄?  
  
- 연산자가 없다는 점에 대한 불만  
  - 여러 DATABASE 열 간의 교차 데이터베이스 조인을 위한 인덱스와 독특한 연산자 구문을 원함
