1:"$Sreact.fragment"
2:I[5569,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"default"]
3:I[75669,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"default"]
5:I[44969,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"OutletBoundary"]
6:"$Sreact.suspense"
9:I[44969,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"ViewportBoundary"]
b:I[44969,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"MetadataBoundary"]
d:I[92989,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"default",1]
:HL["/_next/static/chunks/2bw6kyjchnw2k.css","style"]
:HL["/_next/static/media/0c795a286deabae8-s.p.3vm0tq4e-zz_5.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/f06bf9da926bae75-s.p.2874ccu1_u7jf.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
0:{"P":null,"c":["","use-cases","duplicate-postgres-index",""],"q":"","i":false,"f":[[["",{"children":["use-cases",{"children":[["slug","duplicate-postgres-index","d",null],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2bw6kyjchnw2k.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/05dk83pddu73w.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/18har9a9axxlo.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-scroll-behavior":"smooth","children":["$","body",null,{"className":"instrument_sans_d8350e3a-module__LA5v5G__variable syne_89eecdd9-module__ON88Zq__variable font-sans","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"}]}]}]]}],{"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":["$L4",[["$","script","script-0",{"src":"/_next/static/chunks/18panc4k51dyj.js","async":true,"nonce":"$undefined"}]],["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]]}],{},null,false,null]},null,false,"$@8"]},null,false,"$@8"]},null,false,null],["$","$1","h",{"children":[null,["$","$L9",null,{"children":"$La"}],["$","div",null,{"hidden":true,"children":["$","$Lb",null,{"children":["$","$6",null,{"name":"Next.Metadata","children":"$Lc"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$d",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2bw6kyjchnw2k.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"EqUjFbeEu2GGU5Aqk3_aw"}
e:[]
8:"$We"
f:I[71341,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js","/_next/static/chunks/18panc4k51dyj.js"],"default"]
4:["$","main",null,{"className":"min-h-screen bg-[#f7f5ee] text-[#0b1728]","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"TechArticle\",\"headline\":\"Does this migration add a duplicate PostgreSQL index?\",\"description\":\"Find leading-prefix overlap between a proposed B-tree index and indexes already present in PostgreSQL.\",\"mainEntityOfPage\":\"https://eyeinthesky6.github.io/indexpilot/use-cases/duplicate-postgres-index/\",\"about\":{\"@type\":\"SoftwareApplication\",\"name\":\"IndexPilot\",\"applicationCategory\":\"DeveloperApplication\"}}"}}],["$","article",null,{"className":"mx-auto max-w-4xl px-5 py-14 sm:px-8 sm:py-20","children":[["$","a",null,{"href":"https://eyeinthesky6.github.io/indexpilot/","className":"inline-flex items-center gap-2 text-sm font-bold text-[#456b00]","children":[["$","$Lf",null,{"ref":"$undefined","iconNode":[["path",{"d":"m12 19-7-7 7-7","key":"1l729n"}],["path",{"d":"M19 12H5","key":"x3x0zl"}]],"className":"lucide-arrow-left h-4 w-4"}]," IndexPilot"]}],["$","p",null,{"className":"mt-12 font-mono text-xs font-bold uppercase tracking-[0.16em] text-[#456b00]","children":"PostgreSQL index decision guide"}],["$","h1",null,{"className":"mt-4 font-display text-4xl font-bold tracking-[-0.045em] sm:text-6xl","children":"Does this migration add a duplicate PostgreSQL index?"}],["$","p",null,{"className":"mt-7 max-w-3xl text-xl leading-9 text-[#435064]","children":"Find leading-prefix overlap between a proposed B-tree index and indexes already present in PostgreSQL."}],["$","section",null,{"className":"mt-12 rounded-3xl bg-[#0b1728] p-7 text-[#f7f5ee] sm:p-10","children":[["$","h2",null,{"className":"font-display text-2xl font-bold","children":"The problem"}],["$","p",null,{"className":"mt-4 text-lg leading-8 text-[#cbd4df]","children":"A new index can duplicate storage and write cost already paid for another index."}],["$","h2",null,{"className":"mt-9 font-display text-2xl font-bold","children":"How IndexPilot helps"}],["$","p",null,{"className":"mt-4 text-lg leading-8 text-[#cbd4df]","children":"IndexPilot compares the proposed index shape with visible catalog indexes and reports existing_overlap for human review. It never drops either index automatically."}]]}],["$","section",null,{"className":"mt-12","children":[["$","h2",null,{"className":"font-display text-3xl font-bold","children":"Try it"}],["$","div",null,{"className":"mt-5 overflow-x-auto rounded-2xl border border-[#0b1728]/15 bg-white p-5 font-mono text-sm","children":[["$","span",null,{"className":"text-[#456b00]","children":"$$"}]," pipx install indexpilot",["$","br",null,{}],["$","span",null,{"className":"text-[#456b00]","children":"$$"}]," ","indexpilot review --migration-file migration.sql --fail-on existing_overlap"]}],["$","ul",null,{"className":"mt-7 grid gap-3","children":[["$","li","Exact proposed column order",{"className":"flex items-start gap-3","children":[["$","$Lf",null,{"ref":"$undefined","iconNode":[["path",{"d":"M20 6 9 17l-5-5","key":"1gmf2c"}]],"className":"lucide-check mt-1 h-5 w-5 text-[#456b00]"}],["$","span",null,{"children":"Exact proposed column order"}]]}],["$","li","Existing leading-prefix coverage",{"className":"flex items-start gap-3","children":[["$","$Lf",null,{"ref":"$undefined","iconNode":"$4:props:children:1:props:children:5:props:children:2:props:children:0:props:children:0:props:iconNode","className":"lucide-check mt-1 h-5 w-5 text-[#456b00]"}],["$","span",null,{"children":"Existing leading-prefix coverage"}]]}],["$","li","Portable Markdown, JSON, and SARIF reports",{"className":"flex items-start gap-3","children":[["$","$Lf",null,{"ref":"$undefined","iconNode":"$4:props:children:1:props:children:5:props:children:2:props:children:0:props:children:0:props:iconNode","className":"lucide-check mt-1 h-5 w-5 text-[#456b00]"}],["$","span",null,{"children":"Portable Markdown, JSON, and SARIF reports"}]]}]]}]]}],["$","section",null,{"className":"mt-14 border-t border-[#0b1728]/15 pt-10","children":[["$","h2",null,{"className":"font-display text-3xl font-bold","children":"Important limit"}],["$","p",null,{"className":"mt-4 text-lg leading-8 text-[#435064]","children":"IndexPilot decides whether an index has enough evidence to benchmark. It does not claim that planner cost equals production latency or that an index is safe to ship."}],"$L10"]}],"$L11"]}]]}]
10:["$","div",null,{"className":"mt-8 flex flex-col gap-3 sm:flex-row","children":[["$","a",null,{"href":"https://github.com/eyeinthesky6/indexpilot#quick-start","className":"inline-flex items-center justify-center gap-2 rounded-full bg-[#b8f34a] px-6 py-3 font-bold","children":["Review a migration ",["$","$Lf",null,{"ref":"$undefined","iconNode":[["path",{"d":"M5 12h14","key":"1ays0h"}],["path",{"d":"m12 5 7 7-7 7","key":"xquz4c"}]],"className":"lucide-arrow-right h-4 w-4"}]]}],["$","a",null,{"href":"https://github.com/eyeinthesky6/indexpilot","className":"inline-flex items-center justify-center gap-2 rounded-full border border-[#0b1728] px-6 py-3 font-bold","children":[["$","svg",null,{"aria-hidden":true,"fill":"currentColor","viewBox":"0 0 16 16","xmlns":"http://www.w3.org/2000/svg","className":"h-4 w-4","children":["$","path",null,{"d":"M8 0C3.58 0 0 3.64 0 8.13c0 3.59 2.29 6.64 5.47 7.71.4.08.55-.18.55-.39 0-.2-.01-.84-.01-1.53-2.01.38-2.53-.5-2.69-.96-.09-.23-.48-.96-.82-1.16-.28-.15-.68-.53-.01-.54.63-.01 1.08.59 1.23.83.72 1.23 1.87.88 2.33.67.07-.53.28-.88.51-1.08-1.78-.21-3.64-.9-3.64-4.01 0-.89.31-1.62.82-2.19-.08-.2-.36-1.04.08-2.16 0 0 .67-.22 2.2.84A7.5 7.5 0 0 1 8 3.89c.68 0 1.36.09 2 .27 1.53-1.06 2.2-.84 2.2-.84.44 1.12.16 1.96.08 2.16.51.57.82 1.3.82 2.19 0 3.12-1.87 3.8-3.65 4.01.29.25.54.73.54 1.49 0 1.08-.01 1.95-.01 2.22 0 .21.15.47.55.39A8.14 8.14 0 0 0 16 8.13C16 3.64 12.42 0 8 0Z"}]}]," View on GitHub"]}]]}]
11:["$","aside",null,{"className":"mt-16 rounded-2xl border border-[#0b1728]/10 p-6","children":[["$","p",null,{"className":"flex items-center gap-2 font-bold","children":[["$","$Lf",null,{"ref":"$undefined","iconNode":[["path",{"d":"M12 19h8","key":"baeox8"}],["path",{"d":"m4 17 6-6-6-6","key":"1yngyt"}]],"className":"lucide-terminal h-4 w-4"}]," Other PostgreSQL index questions"]}],["$","ul",null,{"className":"mt-4 grid gap-2","children":[["$","li","should-i-add-this-postgres-index",{"children":["$","a",null,{"className":"text-[#456b00] underline decoration-[#456b00]/30 underline-offset-4","href":"https://eyeinthesky6.github.io/indexpilot/use-cases/should-i-add-this-postgres-index/","children":"Should I add this PostgreSQL index?"}]}],["$","li","postgres-index-not-used",{"children":["$","a",null,{"className":"text-[#456b00] underline decoration-[#456b00]/30 underline-offset-4","href":"https://eyeinthesky6.github.io/indexpilot/use-cases/postgres-index-not-used/","children":"Why is PostgreSQL not using my index?"}]}],["$","li","test-postgres-index-before-creating",{"children":["$","a",null,{"className":"text-[#456b00] underline decoration-[#456b00]/30 underline-offset-4","href":"https://eyeinthesky6.github.io/indexpilot/use-cases/test-postgres-index-before-creating/","children":"Test a PostgreSQL index before creating it"}]}],["$","li","postgres-index-review-in-ci",{"children":["$","a",null,{"className":"text-[#456b00] underline decoration-[#456b00]/30 underline-offset-4","href":"https://eyeinthesky6.github.io/indexpilot/use-cases/postgres-index-review-in-ci/","children":"Review PostgreSQL index migrations in CI"}]}]]}]]}]
a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
12:I[28453,["/_next/static/chunks/05dk83pddu73w.js","/_next/static/chunks/18har9a9axxlo.js"],"IconMark"]
7:null
c:[["$","title","0",{"children":"Does this migration add a duplicate PostgreSQL index? · IndexPilot"}],["$","meta","1",{"name":"description","content":"Find leading-prefix overlap between a proposed B-tree index and indexes already present in PostgreSQL."}],["$","meta","2",{"name":"keywords","content":"PostgreSQL,database migrations,index review,HypoPG,pg_stat_statements,SARIF"}],["$","meta","3",{"name":"robots","content":"index, follow"}],["$","link","4",{"rel":"canonical","href":"https://eyeinthesky6.github.io/indexpilot/use-cases/duplicate-postgres-index/"}],["$","meta","5",{"property":"og:title","content":"Does this migration add a duplicate PostgreSQL index?"}],["$","meta","6",{"property":"og:description","content":"Find leading-prefix overlap between a proposed B-tree index and indexes already present in PostgreSQL."}],["$","meta","7",{"property":"og:url","content":"https://eyeinthesky6.github.io/indexpilot/use-cases/duplicate-postgres-index/"}],["$","meta","8",{"property":"og:type","content":"article"}],["$","meta","9",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","10",{"name":"twitter:title","content":"IndexPilot | Stop bad PostgreSQL indexes before production"}],["$","meta","11",{"name":"twitter:description","content":"Check a proposed index against your real PostgreSQL workload before you merge it."}],["$","meta","12",{"name":"twitter:image","content":"https://eyeinthesky6.github.io/indexpilot/brand/indexpilot-social.png"}],["$","link","13",{"rel":"icon","href":"/icon.svg?icon.2e35fnhng8lze.svg","sizes":"any","type":"image/svg+xml"}],["$","$L12","14",{}]]
