<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: tudorg</title><link>https://news.ycombinator.com/user?id=tudorg</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 30 Jun 2026 22:30:43 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tudorg" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tudorg in "Looking Ahead to Postgres 19"]]></title><description><![CDATA[
<p>A bit of a shameless plug, but I've been working on this for a few months in the form of an extension: <a href="https://github.com/xataio/deltax" rel="nofollow">https://github.com/xataio/deltax</a><p>When I started I thought there's too much inherent overhead in using Postgres tables for storage and using the Postgres executor, so figured it would be pretty cool to match Timescale in performance. I didn't think it would be possible to get close to dedicated analytical DBs. But as the project progressed and the performance got better and better, I'm now firmly in the camp of doing analytics with Postgres + an extension.</p>
]]></description><pubDate>Tue, 30 Jun 2026 16:41:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48735322</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=48735322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48735322</guid></item><item><title><![CDATA[New comment by tudorg in "How TimescaleDB compresses time-series data"]]></title><description><![CDATA[
<p>For context, I'm CTO at Xata where we offer a Postgres service that differentiates via other ways (very fast CoW branching, scale-to-zero, anonymization, etc). We often recommend people keeping production where it is (RDS, Cloud SQL, on-prem, etc.) and use Xata only for staging + branching.<p>We can't offer Timescale because of the license (except for the version without compression), which blocks some potential customers from using us.<p>So there is currently no monetization plan beyond reducing this blocker for us. An explicit goal of DeltaX is to be pure OSS, offered on Xata, and also hopefully on all other Postgres providers. Without making any hard promises for the long-term future, I will say I care deeply about it being something that reduces lock-in in the Postgres ecosystem, rather than increasing it.</p>
]]></description><pubDate>Tue, 16 Jun 2026 16:26:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48557789</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=48557789</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48557789</guid></item><item><title><![CDATA[New comment by tudorg in "How TimescaleDB compresses time-series data"]]></title><description><![CDATA[
<p>I have been working on another PG extension for timeseries (<a href="https://github.com/xataio/deltax" rel="nofollow">https://github.com/xataio/deltax</a>) for a few months, and trying to make it score as good as possible on ClickBench.<p>This is a project that is simply lot of fun to work on. There are many tricks that can be used to speed-up analytics, besides just type-aware compression:<p>* for each segment you will keep things like max/min/sum, number of distinct values, bloom filters, etc. For a good amount of common queries, you can answer them just based on this metadata, so you don't need to decompress the columns at all.<p>* for text column, you compress them differently based on cardinality. Low cardinality (think labels or similar) is dictionary based compression. High cardinality is LZ4.<p>* Generally the smaller the data on disk, the higher the cold runs performance. This is because you need less IO to load it in memory. I have discovered that on top of the type-aware compression, it's worth doing another round of LZ4. There's also some research that it's sometimes worth doing multiple passes of LZ4.<p>* Partition and segment pruning. If you can tell from the metadata or bloom filters that the filter doesn't match a partition or segment, you skip the whole thing.<p>* Push down of filters in the decompression layer. Depending on the compression algorithm, while you decompress you can also filter out the values that you don't need. This avoids passing data and allocating memory for elements that will be later discarded anyway.<p>* Organization of data on disk is more important than almost anything else. Of course, that's the main point of columnar storage, but there are level of details on how to organize the data so that IO is minimized during queries. I have tried 3-4 different layouts before settling on one.<p>* For top N type of queries, which are really common in analytics, you want to stop the reading from disk / decompressed as soon as you have enough data to guarantee that you have a correct top N to satisfy the query.<p>* Parallelize everything: at least ClickBench runs on instances with a lot of CPU cores, so you need to parallelize every step of the way. This is done differently depending on the query type. For example for top N, each worker can take a subset of the segments and get the top N from each of them. Then you combine those in a single result.</p>
]]></description><pubDate>Mon, 15 Jun 2026 19:05:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48545634</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=48545634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48545634</guid></item><item><title><![CDATA[A thousand Postgres branches for $1]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/a-thousand-postgres-branches-for-1">https://xata.io/blog/a-thousand-postgres-branches-for-1</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48532248">https://news.ycombinator.com/item?id=48532248</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 14 Jun 2026 20:24:36 +0000</pubDate><link>https://xata.io/blog/a-thousand-postgres-branches-for-1</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=48532248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48532248</guid></item><item><title><![CDATA[A thousand Postgres branches for $1]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/a-thousand-postgres-branches-for-1">https://xata.io/blog/a-thousand-postgres-branches-for-1</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48517959">https://news.ycombinator.com/item?id=48517959</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 13 Jun 2026 14:58:14 +0000</pubDate><link>https://xata.io/blog/a-thousand-postgres-branches-for-1</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=48517959</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48517959</guid></item><item><title><![CDATA[New comment by tudorg in "Show HN: Xata, open-source Postgres platform with copy-on-write branches"]]></title><description><![CDATA[
<p>Hi HN,<p>This is Tudor from Xata. You can think of Xata as an open-source, self-hosted, alternative to Aurora/Neon. Highlight features are:<p>- Fast copy-on-write branching.<p>- Automatic scale-to-zero and wake-up on new connections.<p>- 100% Vanilla Postgres. We run upstream Postgres, no modifications.<p>- Production grade: high availability, read replicas, automatic failover/switchover, upgrades, backups with PITR, IP filtering, etc.<p>You can self-host it, or you can use our [cloud service](<a href="https://xata.io" rel="nofollow">https://xata.io</a>).<p>Background story: we exist as a company for almost 5 years, offered a Postgres service from the start, and have launched several different products and open source projects here on HN before, including pgroll and pgstream. About a year and half ago, we’ve started to rearchitect our core platform from scratch. It is running in production for almost an year now, and it’s serving customers of all sizes, including many multi-TB databases.<p>One of our goals in designing the new platform was to make it cloud independent and with a careful selection of dependencies. Part of the reason was for us to be able to offer it in any cloud, and the other part is the subject of the announcement today: we wanted to have it open source and self-hostable.<p>Use cases: We think Xata OSS is appropriate for two use cases:<p>- get fast your preview / testing / dev / ephemeral environments with realistic data. We think for many companies this is a better alternative to seed or synthetic data, and allows you to catch more classes of bugs. Combined with anonymization, especially in the world of coding agents, this is an important safety and productivity enabler.<p>- offer an internal PGaaS. The alternative we usually see at customers is that they use a Kubernetes operator to achieve this. But there’s more to a Postgres platform than just the operator. Xata is more opinionated and comes with APIs and CLI.<p>Technical details: We wanted from the start to offer CoW branching and vanilla Postgres. This basically meant that we wanted to do CoW at the storage layer, under Postgres. We’ve have tested a bunch of storage system for performance and reliability and ultimately landed on using OpenEBS. OpenEBS is an umbrella project for more storage engines for Kubernetes, and the one that we use is the replicated storage engine (aka Mayastor).<p>Small side note on separation of storage from compute: since the introduction of PlanetScale Metal, there has been a lot of discussion about the performance of local storage. We had these discussions internally as well, and what’s nice about OpenEBS is that it actually supports both: there are local storage engines and over-the-network storage engines. For our purpose of running CoW branches, however, the advantages of the separation are pretty clear: it allows spreading the compute to multiple nodes, while keeping the storage volumes colocated, which is needed for CoW.
So for now the Xata platform is focused on this, but it’s entirely possible to run Xata with local storage: basically a storage-class change away.<p>Another small side note: while Mayastor is serving us well, and it’s what we recommend for OSS installations, we have been working on our own storage engine in parallel (called Xatastor). It is the key to having sub-second branching and wake-up times and we’ll release it in a couple of weeks.<p>For the compute layer, we are building on top of CloudNativePG. It’s a stable and battle-tested operator covering all the production great concerns. We did add quite a lot of services around it, though: our custom SQL gateway, a “branch” operator, control plane and authentication services, etc.<p>The end result is what we think is an opinionated but flexible Postgres platform. More high level and easier to use than a K8s operator, and with a lot of battery included goodies.<p>Let us know if you have any questions!</p>
]]></description><pubDate>Thu, 16 Apr 2026 17:23:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47796646</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47796646</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47796646</guid></item><item><title><![CDATA[Show HN: Xata, open-source Postgres platform with copy-on-write branches]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/xataio/xata">https://github.com/xataio/xata</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47796589">https://news.ycombinator.com/item?id=47796589</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Thu, 16 Apr 2026 17:20:16 +0000</pubDate><link>https://github.com/xataio/xata</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47796589</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47796589</guid></item><item><title><![CDATA[New comment by tudorg in "Cal.com is going closed source"]]></title><description><![CDATA[
<p>It's funny that this news showed up just as we (Xata) have gone the other direction, citing also changes due to AI: <a href="https://xata.io/blog/open-source-postgres-branching-copy-on-write" rel="nofollow">https://xata.io/blog/open-source-postgres-branching-copy-on-...</a><p>We did consider arguments in both directions (e.g. easier to recreate the code, agents can understand better how it works), but I honestly think the security argument goes for open source: the OSS projects will get more scrutiny faster, which means bugs won't linger around.<p>Time will tell, I am in the open source camp, though.</p>
]]></description><pubDate>Wed, 15 Apr 2026 16:02:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47781034</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47781034</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47781034</guid></item><item><title><![CDATA[New comment by tudorg in "Show HN: pg_stream – incremental view maintenance for PostgreSQL in Rust"]]></title><description><![CDATA[
<p>This sounds cool, adding to my list of things to try out.<p>One note, this shouldn't be confused with <a href="https://github.com/xataio/pgstream" rel="nofollow">https://github.com/xataio/pgstream</a> which does logical replication/CDC with DDL changes.</p>
]]></description><pubDate>Thu, 26 Feb 2026 19:41:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47171031</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47171031</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47171031</guid></item><item><title><![CDATA[New comment by tudorg in "The Coding Agent Is Dead"]]></title><description><![CDATA[
<p>> The Amp editor extensions will self-destruct on March 5 at 8pm Pacific Time. Time to switch to the Amp CLI.<p>That's an interesting way to tackle the removal of features.</p>
]]></description><pubDate>Thu, 19 Feb 2026 18:23:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47077104</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47077104</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47077104</guid></item><item><title><![CDATA[New comment by tudorg in "Show HN: SQL-tap – Real-time SQL traffic viewer for PostgreSQL and MySQL"]]></title><description><![CDATA[
<p>> The Postgres extension model to capture the metrics (we also experimented with eBPF, but it causes too many kernel-user space context switches when you can do the same in an extension without them), and a small sidecar to push the metrics out via a standardized protocol like OTEL.<p>The extension model is great, but it doesn't work with existing postgres providers (RDS, Aurora, etc.). Unless one such extension becomes standard enough that all providers will support it. That would be ideal, IMO.<p>To be clear, I don't mean pg_stat_statements, that is standard enough, but an extension that pushes the actual queries in real-time.<p>> If it's a network hop, then adds milliseconds, and not microseconds.<p>Are you talking about connection establishing time or for query delay? I think it should normally be under a millisecond for the later.</p>
]]></description><pubDate>Sat, 14 Feb 2026 12:31:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47014070</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47014070</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47014070</guid></item><item><title><![CDATA[New comment by tudorg in "Show HN: SQL-tap – Real-time SQL traffic viewer for PostgreSQL and MySQL"]]></title><description><![CDATA[
<p>Even then, though, it needs to run on the server so it's hard to guarantee to not impact performance and availability. There are many Postgres/Mysql proxies used for connection pooling and such, so at least we understand their impact pretty well (and it tends to be minimal).</p>
]]></description><pubDate>Sat, 14 Feb 2026 10:13:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47013314</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47013314</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47013314</guid></item><item><title><![CDATA[Skim-review is the new normal. Your data workflow has to catch up]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/skim-review-is-the-new-normal-your-data-workflow-has-to-catch-up">https://xata.io/blog/skim-review-is-the-new-normal-your-data-workflow-has-to-catch-up</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47007153">https://news.ycombinator.com/item?id=47007153</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 13 Feb 2026 20:08:08 +0000</pubDate><link>https://xata.io/blog/skim-review-is-the-new-normal-your-data-workflow-has-to-catch-up</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=47007153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47007153</guid></item><item><title><![CDATA[New comment by tudorg in "Ask HN: How do you safely give LLMs SSH/DB access?"]]></title><description><![CDATA[
<p>Others have mentioned similar solutions but I’d like to add one: a database solution with CoW branching and PII anonymisation solves the db part in a safe way.<p>Disclaimer: I work at Xata.io, which provides these features. We have a recent blog post with a demo of this: <a href="https://xata.io/blog/database-branching-for-ai-coding-agents" rel="nofollow">https://xata.io/blog/database-branching-for-ai-coding-agents</a></p>
]]></description><pubDate>Thu, 15 Jan 2026 02:41:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46627366</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46627366</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46627366</guid></item><item><title><![CDATA[Everything you should know about PostgreSQL constraints]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/constraints-in-postgres">https://xata.io/blog/constraints-in-postgres</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46584161">https://news.ycombinator.com/item?id=46584161</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 12 Jan 2026 04:37:36 +0000</pubDate><link>https://xata.io/blog/constraints-in-postgres</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46584161</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46584161</guid></item><item><title><![CDATA[What you should know about constraints in PostgreSQL]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/constraints-in-postgres">https://xata.io/blog/constraints-in-postgres</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46556765">https://news.ycombinator.com/item?id=46556765</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 09 Jan 2026 17:56:37 +0000</pubDate><link>https://xata.io/blog/constraints-in-postgres</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46556765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46556765</guid></item><item><title><![CDATA[New comment by tudorg in "Instant database clones with PostgreSQL 18"]]></title><description><![CDATA[
<p>This is really cool and I love to see the interest in fast clones / branching here.<p>We've built Xata with this idea of using copy-on-write database branching for staging and testing setups, where you need to use testing data that's close to the real data. On top of just branching, we also do things like anonymization and scale-to-zero, so the dev branches are often really cheap. Check it out at <a href="https://xata.io/" rel="nofollow">https://xata.io/</a><p>> The source database can't have any active connections during cloning. This is a PostgreSQL limitation, not a filesystem one. For production use, this usually means you create a dedicated template database rather than cloning your live database directly.<p>This is a key limitation to be aware of. A way to workaround it could be to use pgstream (<a href="https://github.com/xataio/pgstream" rel="nofollow">https://github.com/xataio/pgstream</a>) to copy from the production database to a production replica. Pgstream can also do anonymization on the way, this is what we use at Xata.</p>
]]></description><pubDate>Thu, 25 Dec 2025 03:02:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46381697</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46381697</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46381697</guid></item><item><title><![CDATA[What you should know about constraints in PostgreSQL]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/constraints-in-postgres">https://xata.io/blog/constraints-in-postgres</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46234287">https://news.ycombinator.com/item?id=46234287</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 11 Dec 2025 17:26:39 +0000</pubDate><link>https://xata.io/blog/constraints-in-postgres</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46234287</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46234287</guid></item><item><title><![CDATA[Coding agent using Postgres copy-on-write branches]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/a-coding-agent-that-uses-postgres-branches">https://xata.io/blog/a-coding-agent-that-uses-postgres-branches</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46218734">https://news.ycombinator.com/item?id=46218734</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 10 Dec 2025 15:25:36 +0000</pubDate><link>https://xata.io/blog/a-coding-agent-that-uses-postgres-branches</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46218734</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46218734</guid></item><item><title><![CDATA[Building a coding agent that uses Postgres branches]]></title><description><![CDATA[
<p>Article URL: <a href="https://xata.io/blog/a-coding-agent-that-uses-postgres-branches">https://xata.io/blog/a-coding-agent-that-uses-postgres-branches</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46195466">https://news.ycombinator.com/item?id=46195466</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 08 Dec 2025 17:58:29 +0000</pubDate><link>https://xata.io/blog/a-coding-agent-that-uses-postgres-branches</link><dc:creator>tudorg</dc:creator><comments>https://news.ycombinator.com/item?id=46195466</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46195466</guid></item></channel></rss>