Postgres 활용 방법
(github.com/Olshansk)목표 및 영감
- 이 저장소의 목표는 Postgres를 모든 것에 사용하는 방법을 보여주는 것임.
- Amazing CTO의 기사와 @cpursley의 GitHub gist에서 영감을 받음.
왜 이 목록을 유지하는가?
- 매주 Postgres 위에 새로운 도구나 사용 방법이 등장하므로, 이를 기록할 장소가 필요함.
- 다른 예시가 있다면 PR을 제출할 수 있음.
목차
- 블로그 게시물 및 기사
- 크론 작업
- 메시지 큐
- 분석
- GIS 및 매핑
- 감사 로그
- 접근 제어 및 권한 부여
- 검색
- 전체 텍스트
- 벡터
- 시계열
- 열 지향
- NoSQL
- 그래프 데이터
- 외부 데이터
- 대체 쿼리 언어
- HTTP
- API
- 이벤트, 복제, CDC
- 캐싱
- 단위 테스트
- HTML 및 애플리케이션
- 그래픽 및 시각화
- 마이그레이션
- 성능 튜닝
- 확장 및 저장
- 대시보드 및 UI
- 데이터 시각화
- 패키지 관리
- 언어 서버
- 기타
- 보너스: Supabase를 포함하는 항목 수
블로그 게시물 및 기사
- 코드를 데이터베이스 함수로 이동하여 단순화
- 모든 것에 Postgres 사용
- PostgreSQL은 세계 최고의 데이터베이스
- Postgres가 데이터베이스 세계를 장악하고 있음
- Hacker News 토론
크론 작업
- citusdata/pg_cron
- cybertec-postgresql/pg_timetable
메시지 큐
- Postgres 큐 기술 선택에 대한 글
- tembo-io/pgmq
- SKIP LOCKED
- riverqueue/river
- sequinstream/sequin: Postgres에서 CDC를 위한 도구로, Kafka 및 SQS와 같은 스트리밍 플랫폼 및 큐로 Postgres 행과 변경 사항을 쉽게 스트리밍할 수 있음.
- janbjorge/pgqueuer: PostgreSQL을 활용한 효율적인 작업 큐잉을 위한 Python 라이브러리
분석
- pg_analytics: Postgres를 빠른 OLAP 데이터베이스로 변환
- pg_duckdb: DuckDB를 위한 공식 Postgres 확장
GIS 및 매핑
- postgis/postgis
감사 로그
- arkhipov/temporal_tables
- supabase/supa_audit
- pgMemento/pgMemento
- pgaudit/pgaudit
접근 제어 및 권한 부여
- arkhipov/acl
- pgcrypto 문서
- michelp/pgjwt
- supabase.com의 데이터베이스 보안 가이드
검색
전체 텍스트
- Postgres 전체 텍스트 검색 관련 유용한 링크 모음
- paradedb/paradedb
- Postgres 전체 텍스트 검색과 다른 검색 기술 비교
벡터
- pgvector/pgvector
- tensorchord/VectorChord: 확장 가능한 고성능 벡터 유사성 검색을 위한 PostgreSQL 확장
- timescale/pgai: Postgres 내에서 RAG, 시맨틱 검색 및 기타 AI 애플리케이션 개발을 허용하는 PostgreSQL 확장
- timescale/pgvectorscale: pgvector를 보완하는 DiskANN 벡터 인덱스 구현
시계열
- timescale/timescaledb
- tembo-io/pg_timeseries
- pg_timeseries 소개: PostgreSQL을 위한 오픈 소스 시계열 확장
열 지향
- hydradatabase/hydra
- citusdata/cstore_fdw
NoSQL
- JSON 데이터 저장 및 인덱싱에 대한 PostgreSQL 문서
- robconery/dox
- ferretdb.com
- PostgreSQL에서 JSONB를 효과적으로 저장 및 인덱싱하는 방법
그래프 데이터
- age.apache.org
외부 데이터
- supabase/wrappers
대체 쿼리 언어
- kaspermarstal/plprql
- supabase.github.io/pg_graphql
- dosco/graphjin
HTTP
- pramsey/pgsql-http
- supabase/pg_net
API
- PostgREST/postgrest
- hasura/graphql-engine
- postgraphile.org
- supabase.github.io/pg_graphql
이벤트, 복제, CDC
- Postgres를 사용하는 애플리케이션을 위한 Notifier 패턴
- SQL NOTIFY 문서
- cpursley/walex
- PeerDB-io/peerdb
- debezium/debezium
- 2ndQuadrant/pglogical
캐싱
- martinheinz.dev 블로그
- readysettech/readyset
단위 테스트
- theory/pgtap
- peterldowns/pgtestdb
HTML 및 애플리케이션
- SQLpage
- Omnigres
- pg_render
- plmustache
그래픽 및 시각화
- pgSVG
마이그레이션
- purcell/postgresql-migrations
- bytebase.com
- xataio/pgroll
- stripe/pg-schema-diff
성능 튜닝
- Supabase Index Advisor
- Dexter
- HypoPG
- pg_hint_plan
- PGHero
확장 및 저장
- Cloudflare가 15개의 PostgreSQL 클러스터로 초당 5,500만 요청을 처리한 방법
- supabase/supavisor
- pg-sharding/spqr
- orioledb.com: 디스크 및 메모리 엔진의 장점을 결합한 PostgreSQL 확장
대시보드 및 UI
- Baserow
- NocoDB
- AppSmith
데이터 시각화
- Evidence
- Metabase
패키지 관리
- pgxman/pgxman
- supabase/dbdev
언어 서버
- supabase/postgres_lsp
기타
- 매우 포괄적인 Postgres 도구 목록
- Aurora DSQL에서 지원되지 않는 PostgreSQL 기능 목록
보너스: Supabase를 포함하는 항목 수
- 11개
Hacker News 의견
- Postgres를 모든 것에 사용하지 말고, 100명 이상의 엔지니어로 확장할 때는 각 단위가 자체 Postgres를 갖도록 논리적, 물리적 경계를 설정하는 기술적 리더십이 필요함
- 많은 CTO들이 이 어려운 부분을 수행하지 않음
- Postgres 인덱스가 스킵을 지원하지 않으며, 문자열에 널 문자(\u0000)를 포함할 수 없는 점이 불편함
- Postgres는 훌륭하지만 몇 가지 이상한 결함이 있음
- 데이터베이스에서 생성된 API를 팀 외부 사람들에게 노출하지 않는 것이 좋음
- 데이터 저장 방식을 변경하는 데 제한이 생김
- 이 주제에 대해 이전에 글을 썼으며, 의견이 크게 변하지 않음
- PGQueuer는 Python을 위한 경량 작업 큐로, PostgreSQL을 기반으로 하며 SKIP LOCKED를 사용하여 효율적이고 안전한 작업 처리를 제공함
- Postgres를 이미 사용 중이고 추가 인프라 없이 Python 네이티브 방식으로 백그라운드 작업을 관리하고 싶다면 PGQueuer를 고려할 만함
- MariaDB/MySQL과 PostgreSQL을 비교한 결과, JSON, 시간 테이블, 컬럼 및 벡터 저장소 등 많은 확장 기능이 존재함을 발견함
- LISTEN/NOTIFY 기능은 부족하지만, 많은 레거시 앱에서 사용되지 않음에도 불구하고 놀랍게도 따라잡고 있음
- 오픈소스 BM25 검색을 PL/pgSQL에서 제공하며, Rust 확장을 사용할 수 없는 경우에 유용함
- pgvector와 Reciprocal Rank Fusion을 사용한 하이브리드 검색 제공
- "Amazing CTO"의 기사에서 영감을 받았다는 언급을 보고 기쁨을 느낌
- 하나의 API로 많은 기능에 접근할 수 있는 이점이 많음
- 메시지 큐와 통합하는 대신 INSERT를 통해 간단하게 처리 가능함
- 벡터 검색도 당연히 하나의 데이터베이스로 처리 가능함
- Postgres를 사용하여 HTML을 생성하는 것은 의문이며, 사용자 인터페이스를 만드는 데 적합하지 않을 것 같음
- Postgres 데이터베이스를 자체 호스팅하는 방법에 대한 좋은 자료를 찾고 있음
- 백업, 최적화 등 최선의 방법을 알고 싶음
- Apache Age를 그래프 데이터에 통합하는 데 2주를 보냈지만, 프로젝트가 오래되고 혼란스러움을 깨달음
- DGraph로 더 나은 결과를 기대하고 있지만, 그래프 데이터베이스는 불안정한 상태임