1:"$Sreact.fragment"
2:I[75473,["/_next/static/chunks/316a3a63422f35de.js"],"default"]
3:I[78515,["/_next/static/chunks/316a3a63422f35de.js"],"default"]
4:I[30687,["/_next/static/chunks/fd0661f1506dcbc6.js"],"Toaster"]
5:I[61076,["/_next/static/chunks/fd0661f1506dcbc6.js"],"Analytics"]
7:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"OutletBoundary"]
8:"$Sreact.suspense"
a:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"ViewportBoundary"]
c:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"MetadataBoundary"]
e:I[90849,["/_next/static/chunks/316a3a63422f35de.js"],"default"]
:HL["/_next/static/chunks/609ea7bc18d0d15f.css","style"]
:HL["/_next/static/chunks/93b606aa9fdccd13.css","style"]
:HL["/_next/static/media/797e433ab948586e-s.p.479bea2b.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
0:{"P":null,"b":"TlpKRvbES4zzM7LeczAM7","c":["","blog","pg-advisory-xact-lock-version-stamp"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","pg-advisory-xact-lock-version-stamp","d"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/609ea7bc18d0d15f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/93b606aa9fdccd13.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/fd0661f1506dcbc6.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":[["$","script",null,{"async":true,"src":"https://www.googletagmanager.com/gtag/js?id=AW-18009878040"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n          window.dataLayer = window.dataLayer || [];\n          function gtag(){dataLayer.push(arguments);}\n          gtag('js', new Date());\n          gtag('config', 'AW-18009878040');\n          gtag('config', 'G-W3XKYXV2SG');\n\n          // Persist UTM and gclid params to sessionStorage for cross-page tracking\n          (function() {\n            var params = new URLSearchParams(window.location.search);\n            var keys = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term','gclid'];\n            keys.forEach(function(k) {\n              var v = params.get(k);\n              if (v) sessionStorage.setItem(k, v);\n            });\n          })();\n        "}}]]}],["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{"position":"top-center","richColors":true,"toastOptions":{"style":{"background":"var(--popover)","color":"var(--popover-foreground)","border":"1px solid var(--border)"}}}],["$","$L5",null,{}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L6",[["$","script","script-0",{"src":"/_next/static/chunks/94245cbda44972fe.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/af778fff4a0f4be6.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/b096b037d08e2f31.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
f:I[15579,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Navigation"]
10:I[3013,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],""]
:HL["/blog/posts/pg-advisory-xact-lock-version-stamp/hero.jpg","image"]
:HL["/blog/posts/logo.png","image"]
6:[["$","$Lf",null,{}],["$","main",null,{"className":"pt-20 md:pt-24","children":["$","article",null,{"children":[["$","header",null,{"className":"border-b border-border","children":["$","div",null,{"className":"container mx-auto px-6 py-14 md:py-20","children":[["$","$L10",null,{"href":"/blog","className":"mb-8 inline-flex items-center text-sm font-medium text-muted-foreground transition-colors hover:text-foreground","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-left mr-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1l729n",{"d":"m12 19-7-7 7-7"}],["$","path","x3x0zl",{"d":"M19 12H5"}],"$undefined"]}],"Blog"]}],["$","div",null,{"className":"grid gap-8 md:grid-cols-[1fr_0.9fr] md:items-start","children":[["$","div",null,{"className":"max-w-3xl","children":[["$","div",null,{"className":"mb-5 flex flex-wrap items-center gap-3 text-sm text-muted-foreground","children":[["$","span",null,{"className":"rounded-md border border-primary/40 bg-primary/10 px-2.5 py-1 text-primary","children":"Database"}],["$","span",null,{"children":"2026-W20"}],["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":"4 min read"}],[["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":["by ",["$","span",null,{"className":"font-medium text-foreground","children":"delve"}]]}]]]}],["$","h1",null,{"className":"text-4xl font-bold leading-tight text-balance md:text-6xl","children":"Atomic Version Counters Without a Sequence — pg_advisory_xact_lock"}],["$","p",null,{"className":"mt-6 text-lg leading-relaxed text-muted-foreground md:text-xl","children":"PostgreSQL advisory locks cost nothing to create and release automatically with the transaction — a better fit than a per-tenant sequence for monotonic counters."}]]}],["$","div",null,{"className":"overflow-hidden rounded-lg border border-border bg-card","children":["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden","children":[null,["$","img",null,{"src":"/blog/posts/pg-advisory-xact-lock-version-stamp/hero.jpg","alt":"A heavy metal date stamp poised over a clean white document, ink visible on the stamp rubber, single overhead light.","className":"h-full w-full object-cover"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-4 top-4 h-[50px] w-[50px] mix-blend-screen"}]]}]}]]}]]}]}],["$","div",null,{"className":"container mx-auto px-6 py-12 md:py-16","children":["$","div",null,{"className":"grid gap-10 lg:grid-cols-[minmax(0,1fr)_280px] lg:items-start","children":[["$","div",null,{"className":"max-w-3xl text-muted-foreground","children":[[["$","h2","h2-0",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"The problem"}],"\n",["$","p","p-0",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["A polling endpoint needed a monotonically increasing version number per tenant. Simple enough: ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"SELECT COALESCE(MAX(version), 0) + 1 FROM instructions WHERE target = :t"}],", then ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"INSERT"}]," with that value. Code review flagged it immediately: two concurrent POSTs to the same tenant can both read the same MAX before either inserts. Both rows get the same version. The poller sees one, skips the other forever."]}],"\n",["$","p","p-1",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The obvious fix — a dedicated sequence per tenant — means a DDL operation every time a new tenant appears. The slightly less obvious fix — a single global sequence — serializes all writes across all tenants. Neither felt right for what was effectively a per-tenant counter with low write volume."}],"\n","$L11","\n","$L12","\n","$L13","\n","$L14","\n","$L15","\n","$L16","\n","$L17","\n","$L18","\n","$L19"],"$L1a",null]}],"$L1b"]}]}]]}]}],"$L1c"]
61:I[41451,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Footer"]
11:["$","h2","h2-1",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"The approach"}]
12:["$","p","p-2",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["PostgreSQL advisory locks are session-or-transaction-scoped mutex locks keyed by a ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"bigint"}],". They cost nothing to create and nothing to destroy — they exist only as a flag in shared memory. ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"pg_advisory_xact_lock(key)"}]," acquires a transaction-scoped lock that automatically releases when the transaction commits or rolls back."]}]
13:["$","p","p-3",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The implementation:"}]
14:["$","div","pre-0",{"style":{"background":"hsl(220, 13%, 18%)","color":"hsl(220, 14%, 71%)","textShadow":"0 1px rgba(0, 0, 0, 0.3)","fontFamily":"\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace","direction":"ltr","textAlign":"left","whiteSpace":"pre","wordSpacing":"normal","wordBreak":"normal","lineHeight":"1.5","MozTabSize":"2","OTabSize":"2","tabSize":"2","WebkitHyphens":"none","MozHyphens":"none","msHyphens":"none","hyphens":"none","padding":"1rem","margin":"0.5em 0","overflow":"auto","borderRadius":"0.5rem","marginTop":"1.25rem","marginBottom":0,"border":"1px solid hsl(var(--border))","fontSize":"0.875rem"},"children":["$","code",null,{"style":{"whiteSpace":"pre","fontFamily":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace"},"children":[false,[["$","span","code-segment-0",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["import"]}],["$","span","code-segment-1",{"className":"$undefined","style":{},"children":[" hashlib "]}],["$","span","code-segment-2",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["as"]}],["$","span","code-segment-3",{"className":"$undefined","style":{},"children":[" _hashlib\n"]}],"\n",["$","span","code-segment-5",{"className":"$undefined","style":{},"children":["lock_key "]}],["$","span","code-segment-6",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-7",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-8",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["int"]}],["$","span","code-segment-9",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-10",{"className":"$undefined","style":{},"children":["_hashlib"]}],["$","span","code-segment-11",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-12",{"className":"$undefined","style":{},"children":["md5"]}],["$","span","code-segment-13",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-14",{"className":"$undefined","style":{},"children":["tenant"]}],["$","span","code-segment-15",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-16",{"className":"$undefined","style":{},"children":["encode"]}],["$","span","code-segment-17",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-18",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-19",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-20",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-21",{"className":"$undefined","style":{},"children":["hexdigest"]}],["$","span","code-segment-22",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-23",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-24",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["["]}],["$","span","code-segment-25",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-26",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["15"]}],["$","span","code-segment-27",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["]"]}],["$","span","code-segment-28",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}],["$","span","code-segment-29",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-30",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["16"]}],["$","span","code-segment-31",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-32",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-33",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["&"]}],["$","span","code-segment-34",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-35",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["0x7FFFFFFFFFFFFFFF"]}],["$","span","code-segment-36",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-37",{"className":"$undefined","style":{},"children":["db"]}],["$","span","code-segment-38",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],"$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23","$L24","$L25","$L26","$L27","$L28","$L29","$L2a","$L2b","$L2c","$L2d","$L2e","$L2f","$L30","$L31","$L32","$L33","$L34","$L35","$L36","$L37","$L38","$L39","$L3a","$L3b","$L3c","$L3d","$L3e","$L3f","$L40","$L41","$L42","$L43","$L44","$L45","$L46","$L47","$L48","$L49","$L4a","$L4b","$L4c","$L4d","$L4e","$L4f","$L50","$L51","$L52","$L53","$L54","$L55","$L56","$L57","$L58","$L59","$L5a","$L5b","$L5c","$L5d","$L5e","$L5f","$L60"]]}]}]
15:["$","p","p-4",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The MD5 hash maps the tenant identifier to a stable 63-bit integer (the mask keeps it in the signed bigint range Postgres expects). Two concurrent writes for ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"\"tenant-a\""}]," hash to the same key and queue behind each other. Two writes for ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"\"tenant-a\""}]," and ",["$","code","code-2",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"\"tenant-b\""}]," get different keys and run in parallel. The lock held at ",["$","code","code-3",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"pg_advisory_xact_lock"}]," time is released automatically at ",["$","code","code-4",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"db.commit()"}]," — no explicit unlock needed."]}]
16:["$","h2","h2-2",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"What I learned"}]
17:["$","p","p-5",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The neat property here is that the lock and the counter live in the same transaction. If the INSERT fails and rolls back, the lock releases and the version number was never consumed. There's no tombstone, no gap in the sequence, no cleanup needed. Compare this to a separate sequence table where a rollback leaves a gap you then have to reason about in the polling filter."}]
18:["$","p","p-6",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The MD5 approach has one footgun: two different tenant names that happen to collide in the 63-bit hash space would serialize unnecessarily. At our current scale (fewer than 20 tenants) and with 63 bits of key space, a collision is not a realistic concern. At scale, a dedicated lookup table keyed by tenant name would be the right next step — but that's a schema change, not a locking strategy change."}]
19:["$","p","p-7",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The other thing worth noting: this pattern only works because the advisory lock and the MAX query are in the same transaction. If you split them — lock in one transaction, query in another — you've reproduced the race. Keep them together."}]
1a:["$","div",null,{"className":"mt-14 border-t border-border pt-8","children":["$","$L10",null,{"href":"/platform","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Start a build",["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}]}]
1b:["$","aside",null,{"className":"hidden lg:block","children":["$","div",null,{"className":"sticky top-24 space-y-4","children":[["$","h3",null,{"className":"text-xs font-semibold uppercase tracking-wider text-primary","children":["More in ","Database"]}],["$","div",null,{"className":"space-y-4","children":[["$","$L10","bounding-ordered-set-aggregates",{"href":"/blog/bounding-ordered-set-aggregates","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/bounding-ordered-set-aggregates/hero.jpg","alt":"A row of vintage brass and copper rotary valves on an industrial pipe assembly in a dimly lit utility room, one valve partially closed, sharp focus, no people.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Database"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","5 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"Bounding PostgreSQL Ordered-Set Aggregates Before They Eat Your Database"}]]}]]}],["$","$L10","postgres-sequence-race-condition",{"href":"/blog/postgres-sequence-race-condition","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/postgres-sequence-race-condition/hero.jpg","alt":"Two runners' shoes captured mid-stride at the exact same finish line, viewed straight down from above.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Database"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","5 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"The Select-Then-Insert Race Condition in Version Counters"}]]}]]}]]}],["$","$L10",null,{"href":"/blog?category=database","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Read all in ","Database",["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}]]}]}]
1c:["$","$L61",null,{}]
1d:["$","span","code-segment-39",{"className":"$undefined","style":{},"children":["execute"]}]
1e:["$","span","code-segment-40",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
1f:["$","span","code-segment-41",{"className":"$undefined","style":{},"children":["sa_text"]}]
20:["$","span","code-segment-42",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
21:["$","span","code-segment-43",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"SELECT pg_advisory_xact_lock(:k)\""]}]
22:["$","span","code-segment-44",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
23:["$","span","code-segment-45",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
24:["$","span","code-segment-46",{"className":"$undefined","style":{},"children":[" "]}]
25:["$","span","code-segment-47",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["{"]}]
26:["$","span","code-segment-48",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"k\""]}]
27:["$","span","code-segment-49",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}]
28:["$","span","code-segment-50",{"className":"$undefined","style":{},"children":[" lock_key"]}]
29:["$","span","code-segment-51",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["}"]}]
2a:["$","span","code-segment-52",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
2b:["$","span","code-segment-53",{"className":"$undefined","style":{},"children":["\n"]}]
2c:["$","span","code-segment-54",{"className":"$undefined","style":{},"children":["next_version "]}]
2d:["$","span","code-segment-55",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}]
2e:["$","span","code-segment-56",{"className":"$undefined","style":{},"children":[" db"]}]
2f:["$","span","code-segment-57",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
30:["$","span","code-segment-58",{"className":"$undefined","style":{},"children":["execute"]}]
31:["$","span","code-segment-59",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
32:["$","span","code-segment-60",{"className":"$undefined","style":{},"children":["\n"]}]
33:["$","span","code-segment-61",{"className":"$undefined","style":{},"children":["    sa_text"]}]
34:["$","span","code-segment-62",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
35:["$","span","code-segment-63",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"SELECT COALESCE(MAX(version), 0) + 1 FROM instructions WHERE target = :t\""]}]
36:["$","span","code-segment-64",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
37:["$","span","code-segment-65",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
38:["$","span","code-segment-66",{"className":"$undefined","style":{},"children":["\n"]}]
39:["$","span","code-segment-67",{"className":"$undefined","style":{},"children":["    "]}]
3a:["$","span","code-segment-68",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["{"]}]
3b:["$","span","code-segment-69",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"t\""]}]
3c:["$","span","code-segment-70",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}]
3d:["$","span","code-segment-71",{"className":"$undefined","style":{},"children":[" tenant"]}]
3e:["$","span","code-segment-72",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["}"]}]
3f:["$","span","code-segment-73",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
40:["$","span","code-segment-74",{"className":"$undefined","style":{},"children":["\n"]}]
41:["$","span","code-segment-75",{"className":"$undefined","style":{},"children":[""]}]
42:["$","span","code-segment-76",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
43:["$","span","code-segment-77",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
44:["$","span","code-segment-78",{"className":"$undefined","style":{},"children":["scalar_one"]}]
45:["$","span","code-segment-79",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
46:["$","span","code-segment-80",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
47:["$","span","code-segment-81",{"className":"$undefined","style":{},"children":["\n"]}]
48:["$","span","code-segment-82",{"className":"$undefined","style":{},"children":["instr "]}]
49:["$","span","code-segment-83",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}]
4a:["$","span","code-segment-84",{"className":"$undefined","style":{},"children":[" Instruction"]}]
4b:["$","span","code-segment-85",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
4c:["$","span","code-segment-86",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
4d:["$","span","code-segment-87",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
4e:["$","span","code-segment-88",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
4f:["$","span","code-segment-89",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
50:["$","span","code-segment-90",{"className":"$undefined","style":{},"children":[" version"]}]
51:["$","span","code-segment-91",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}]
52:["$","span","code-segment-92",{"className":"$undefined","style":{},"children":["next_version"]}]
53:["$","span","code-segment-93",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
54:["$","span","code-segment-94",{"className":"$undefined","style":{},"children":["\n"]}]
55:["$","span","code-segment-95",{"className":"$undefined","style":{},"children":["db"]}]
56:["$","span","code-segment-96",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
57:["$","span","code-segment-97",{"className":"$undefined","style":{},"children":["add"]}]
58:["$","span","code-segment-98",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
59:["$","span","code-segment-99",{"className":"$undefined","style":{},"children":["instr"]}]
5a:["$","span","code-segment-100",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
5b:["$","span","code-segment-101",{"className":"$undefined","style":{},"children":["\n"]}]
5c:["$","span","code-segment-102",{"className":"$undefined","style":{},"children":["db"]}]
5d:["$","span","code-segment-103",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
5e:["$","span","code-segment-104",{"className":"$undefined","style":{},"children":["commit"]}]
5f:["$","span","code-segment-105",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
60:["$","span","code-segment-106",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
62:I[94060,["/_next/static/chunks/316a3a63422f35de.js"],"IconMark"]
9:null
d:[["$","title","0",{"children":"Atomic Version Counters Without a Sequence — pg_advisory_xact_lock — Bridgestack"}],["$","meta","1",{"name":"description","content":"PostgreSQL advisory locks cost nothing to create and release automatically with the transaction — a better fit than a per-tenant sequence for monotonic counters."}],["$","meta","2",{"name":"generator","content":"v0.app"}],["$","meta","3",{"property":"og:title","content":"Bridgestack — custom software, flat prices from $9.99"}],["$","meta","4",{"property":"og:description","content":"Talk to Tom, your AI PM. A fleet of AI agents builds your product. Flat one-time price. 7 days to test before you pay. Source code is yours."}],["$","meta","5",{"property":"og:url","content":"https://www.bridgestack.systems"}],["$","meta","6",{"property":"og:site_name","content":"Bridgestack"}],["$","meta","7",{"property":"og:locale","content":"en_US"}],["$","meta","8",{"property":"og:image","content":"https://www.bridgestack.systems/bridgestack-landscape-1200x628.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"628"}],["$","meta","11",{"property":"og:type","content":"website"}],["$","meta","12",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","13",{"name":"twitter:title","content":"Bridgestack — custom software, flat prices from $9.99"}],["$","meta","14",{"name":"twitter:description","content":"Talk to Tom, your AI PM. A fleet of AI agents builds your product. 7 days to test before you pay. Source code is yours."}],["$","meta","15",{"name":"twitter:image","content":"https://www.bridgestack.systems/bridgestack-landscape-1200x628.png"}],["$","link","16",{"rel":"icon","href":"/icon-light-32x32.png","media":"(prefers-color-scheme: light)"}],["$","link","17",{"rel":"icon","href":"/icon-dark-32x32.png","media":"(prefers-color-scheme: dark)"}],["$","link","18",{"rel":"icon","href":"/icon.svg","type":"image/svg+xml"}],["$","link","19",{"rel":"apple-touch-icon","href":"/apple-icon.png"}],["$","$L62","20",{}]]
