{"id":22528441,"url":"https://github.com/Mooncake-Labs/pg_mooncake","last_synced_at":"2025-08-03T23:32:27.700Z","repository":{"id":257894925,"uuid":"852594977","full_name":"Mooncake-Labs/pg_mooncake","owner":"Mooncake-Labs","description":"Columnstore Table in Postgres","archived":false,"fork":false,"pushed_at":"2024-10-24T08:04:00.000Z","size":368,"stargazers_count":31,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-24T10:59:06.775Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mooncake-Labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-05T04:45:58.000Z","updated_at":"2024-10-23T17:50:40.000Z","dependencies_parsed_at":"2024-10-25T21:53:49.891Z","dependency_job_id":null,"html_url":"https://github.com/Mooncake-Labs/pg_mooncake","commit_stats":null,"previous_names":["mooncake-labs/pg_mooncake"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooncake-Labs%2Fpg_mooncake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooncake-Labs%2Fpg_mooncake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooncake-Labs%2Fpg_mooncake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mooncake-Labs%2Fpg_mooncake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mooncake-Labs","download_url":"https://codeload.github.com/Mooncake-Labs/pg_mooncake/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228571857,"owners_count":17938773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-07T07:02:26.167Z","updated_at":"2025-08-03T23:32:27.492Z","avatar_url":"https://github.com/Mooncake-Labs.png","language":"C++","funding_links":[],"categories":["Rust","Client-Server Setups","\u003ca name=\"Rust\"\u003e\u003c/a\u003eRust"],"sub_categories":["Web Clients (WebAssembly)"],"readme":"\u003cdiv align=center\u003e\n\u003ch1 align=center\u003epg_mooncake 🥮\u003c/h1\u003e\n\u003ch4 align=center\u003eReal-time analytics on Postgres tables\u003c/h4\u003e\n\n[![][docs-shield]][docs-link]\n[![][license-shield]][license-link]\n[![][slack-shield]][slack-link]\n[![][x-shield]][x-link]\n\u003c/div\u003e\n\n## Overview\n\n**pg_mooncake** is a Postgres extension that creates a columnstore mirror of your Postgres tables in [Iceberg][iceberg-link], enabling fast analytics queries with sub-second freshness:\n- **Real-time ingestion** powered by [moonlink][moonlink-link] for streaming and batched INSERT/UPDATE/DELETE.\n- **Fast analytics** accelerated by [DuckDB][pgduckdb-link], ranking top 10 on [ClickBench][clickbench-link].\n- **Postgres-native** allowing you to query a columnstore table just like a regular Postgres table.\n- **Iceberg-native** making your data readily accesssible by other query engines.\n\n## Installation\n\n### Option 1: Docker\n\nFor new users, we recommend using the Docker image to get started quickly:\n```bash\ndocker run --name mooncake --rm -e POSTGRES_PASSWORD=password mooncakelabs/pg_mooncake\n```\n\nThis will start Postgres with pg_mooncake preinstalled. You can then connect to it using `psql` with the default user `postgres`:\n```bash\ndocker exec -it mooncake psql -U postgres\n```\n\n### Option 2: From Source\n\nTo build pg_mooncake, first install [Rust][rust-install], [pgrx][pgrx-install], and [the build tools for DuckDB][duckdb-install].\n\nThen, clone the repository:\n```bash\ngit clone --recurse-submodules https://github.com/Mooncake-Labs/pg_mooncake.git\n```\n\nTo build and install for Postgres versions 14-17, run:\n```bash\n# Replace with your Postgres version\ncargo pgrx init --pg17=$(which pg_config)\nmake install PG_VERSION=pg17\n```\n\nFinally, add pg_mooncake to `shared_preload_libraries` in your `postgresql.conf` file and enable logical replication:\n```ini\nshared_preload_libraries = 'pg_mooncake'\nwal_level = logical\n```\n\nFor a complete walkthrough, refer to our [Dockerfile][dockerfile-link].\n\n## Quick Start\n\nFirst, create the pg_mooncake extension:\n```sql\nCREATE EXTENSION pg_mooncake;\n```\n\nNext, create a regular Postgres table `trades`:\n```sql\nCREATE TABLE trades(\n  id bigint PRIMARY KEY,\n  symbol text,\n  time timestamp,\n  price real\n);\n```\n\nThen, create a columnstore mirror `trades_iceberg` that stays in sync with `trades`:\n```sql\nCALL mooncake.create_table('trades_iceberg', 'trades');\n```\n\nNow, insert some data into `trades`:\n```sql\nINSERT INTO trades VALUES\n  (1,  'AMD', '2024-06-05 10:00:00', 119),\n  (2, 'AMZN', '2024-06-05 10:05:00', 207),\n  (3, 'AAPL', '2024-06-05 10:10:00', 203),\n  (4, 'AMZN', '2024-06-05 10:15:00', 210);\n```\n\nFinally, query `trades_iceberg` to see that it reflects the up-to-date state of `trades`:\n```sql\nSELECT avg(price) FROM trades_iceberg WHERE symbol = 'AMZN';\n```\n\n## Contributing\n\npg_mooncake is an open-source project maintained by [Mooncake Labs][mooncake-link] and licensed under the [MIT License][license-link]. We'd love your help to make it even better! Join [our Slack][slack-link], participate in [discussions][discussions-link], open [issues][issues-link] to report bugs or suggest features, contribute code and documentation, or help us improve the project in any way. All contributions are welcome! 🥮\n\n[clickbench-link]: https://www.mooncake.dev/blog/clickbench-v0.1\n[discussions-link]: https://github.com/Mooncake-Labs/pg_mooncake/discussions\n[dockerfile-link]: https://github.com/Mooncake-Labs/pg_mooncake/blob/main/Dockerfile\n[docs-link]: https://docs.mooncake.dev/\n[docs-shield]: https://img.shields.io/badge/docs-mooncake?logo=readthedocs\u0026logoColor=white\n[duckdb-install]: https://duckdb.org/docs/stable/dev/building/overview.html#prerequisites\n[iceberg-link]: https://iceberg.apache.org/\n[issues-link]: https://github.com/Mooncake-Labs/pg_mooncake/issues\n[license-link]: https://github.com/Mooncake-Labs/pg_mooncake/blob/main/LICENSE\n[license-shield]: https://img.shields.io/badge/License-MIT-blue\n[mooncake-link]: https://mooncake.dev/\n[moonlink-link]: https://github.com/Mooncake-Labs/moonlink\n[pgduckdb-link]: https://github.com/duckdb/pg_duckdb\n[pgrx-install]: https://github.com/pgcentralfoundation/pgrx?tab=readme-ov-file#getting-started\n[rust-install]: https://www.rust-lang.org/tools/install\n[slack-link]: https://join.slack.com/t/mooncake-devs/shared_invite/zt-2sepjh5hv-rb9jUtfYZ9bvbxTCUrsEEA\n[slack-shield]: https://img.shields.io/badge/Mooncake%20Devs-purple?logo=slack\n[x-link]: https://x.com/mooncakelabs\n[x-shield]: https://img.shields.io/twitter/url?label=%40mooncakelabs\u0026url=https%3A%2F%2Fx.com%2Fmooncakelabs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMooncake-Labs%2Fpg_mooncake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMooncake-Labs%2Fpg_mooncake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMooncake-Labs%2Fpg_mooncake/lists"}