<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: cataflutter</title><link>https://news.ycombinator.com/user?id=cataflutter</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 12 Apr 2026 07:40:44 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=cataflutter" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by cataflutter in "Keeping a Postgres Queue Healthy"]]></title><description><![CDATA[
<p>For disk usage, yes this doesn't address anything.<p>But for read performance (which is IMO what the section in the article was motivated by), it doesn't actually matter to have a bunch of entries corresponding to dead tuples in your index, provided Postgres doesn't need to actually consider the dead tuples as part of your query.<p>So if you have a monotonically increasing `job_id` and that's indexed, then
so long as you process your jobs in increasing `job_id` order, you can use the index and guarantee you don't have to keep reconsidering the dead tuples corresponding to jobs that already completed (if that makes sense).<p>[This is because the index is a b-tree, which supports efficient (O(log n) page reads for n entries) seeking on (any prefix of) the columns in the index.]</p>
]]></description><pubDate>Sat, 11 Apr 2026 21:08:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47734042</link><dc:creator>cataflutter</dc:creator><comments>https://news.ycombinator.com/item?id=47734042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47734042</guid></item><item><title><![CDATA[New comment by cataflutter in "Keeping a Postgres Queue Healthy"]]></title><description><![CDATA[
<p>Decent article, but some remarks:<p>1) It seems these two statements conflict with each other:<p>> The oldest such transaction sets the cutoff—referred to as the "MVCC horizon." Until that transaction completes, every dead tuple <i>newer than its snapshot</i> is retained.<p>and<p>> For example, imagine three analytics queries, each running for 40 seconds, staggered 20 seconds apart. No individual query would trigger a timeout for running too long. But because one is always active, the horizon never advances, and the effect on vacuum is the same as one transaction that never ends.<p>If the three analytics *transactions* (it's transactions that matter, not queries, although there is some subtlety around deferred transactions not acquiring a snapshot until the first query) are started 
at different times, they will have staggered snapshots and so once the first completes, this should allow the vacuum to advance.<p>2) Although the problem about this query:<p><pre><code>    SELECT * FROM jobs
    WHERE status = 'pending'
    ORDER BY run_at
    LIMIT 1
    FOR UPDATE SKIP LOCKED;
</code></pre>
having to consider dead tuples is a genuine concern and performance problem,
this can also be mitigated by adding a monotonically increasing column
and adding a `WHERE column < ?` clause, provided you have also added an
index to make that pagination efficient.
This way you don't need to consider dead tuples and they 'only' waste space
whilst waiting to be vacuumed, rather than also bogging down read perf.<p>There is a little subtlety around how you guarantee that the column is monotonically
increasing, given concurrent writers, but the answer to that depends on what tricks
you can fit into your application.<p>3) I almost want to say that the one-line summary is 'Don't combine (very) long-running transactions with (very) high transaction rates in Postgres'<p>(Is this a fair representation?)</p>
]]></description><pubDate>Sat, 11 Apr 2026 19:30:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47733308</link><dc:creator>cataflutter</dc:creator><comments>https://news.ycombinator.com/item?id=47733308</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47733308</guid></item><item><title><![CDATA[New comment by cataflutter in "I've been waiting over a month for Anthropic to respond to my billing issue"]]></title><description><![CDATA[
<p>I have now been waiting 2 months for a response to a similar problem. Thanks for the reminder about it, it's time to dig out the chargebacks...</p>
]]></description><pubDate>Thu, 09 Apr 2026 03:02:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47698842</link><dc:creator>cataflutter</dc:creator><comments>https://news.ycombinator.com/item?id=47698842</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47698842</guid></item><item><title><![CDATA[New comment by cataflutter in "EmDash – A spiritual successor to WordPress that solves plugin security"]]></title><description><![CDATA[
<p>Maybe what the parent commenter was referring to is that recently CloudFlare have published multiple vibe-code demo blog posts whilst trying to pass it off as production grade, for example <a href="https://news.ycombinator.com/item?id=46781516">https://news.ycombinator.com/item?id=46781516</a> where they implemented an open standard communication protocol on CloudFlare Workers.<p>The blog post was chock full of factual errors, claimed to be based off project X but wasn't at all and even had the cheek to include that it was arguably the most secure way to deploy such a server, with their implementation apparently already being used by their team to serve real traffic. Meanwhile the repo was full of TODOs for all the security aspects of the protocol.<p>Of course after the backlash a lot of this was covered up so look at the archives if you are curious.<p>They have really done a disservice to themselves because their blog posts used to be excellent, but now I have to question whether it's another blogpost full of fakery like that one (and there was another since iirc).
Given this blog post talks about reimplementing a popular project, it starts to give off the signs of being another one of these. Unfortunate if that's not the case</p>
]]></description><pubDate>Wed, 01 Apr 2026 19:15:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47605209</link><dc:creator>cataflutter</dc:creator><comments>https://news.ycombinator.com/item?id=47605209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47605209</guid></item></channel></rss>