[{"data":1,"prerenderedAt":430},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fschema-consistency":103,"\u002Fguides\u002Fschema-consistency-surround":425},[4,9,31,87,98],{"title":5,"path":6,"stem":7,"icon":8},"Getting started","\u002Fgetting-started","01.getting-started","i-tabler-rocket",{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":30},"Concepts","i-tabler-code","\u002Fconcepts","02.concepts",[15,20,25],{"title":16,"path":17,"stem":18,"icon":19},"Architecture","\u002Fconcepts\u002Farchitecture","02.concepts\u002Farchitecture","i-tabler-sitemap",{"title":21,"path":22,"stem":23,"icon":24},"Metadata and registry","\u002Fconcepts\u002Fmetadata-and-registry","02.concepts\u002Fmetadata-and-registry","i-tabler-schema",{"title":26,"path":27,"stem":28,"icon":29},"Query Engine","\u002Fconcepts\u002Fquery-engine","02.concepts\u002Fquery-engine","i-tabler-engine",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"Guide","i-tabler-arrow-ramp-right","\u002Fguides","03.guides",[37,42,47,52,57,62,67,72,77,82],{"title":38,"path":39,"stem":40,"icon":41},"Audit Log","\u002Fguides\u002Faudit-log","03.guides\u002Faudit-log","i-tabler-history",{"title":43,"path":44,"stem":45,"icon":46},"Cursor pagination","\u002Fguides\u002Fcursor-pagination","03.guides\u002Fcursor-pagination","i-tabler-arrow-bar-to-down",{"title":48,"path":49,"stem":50,"icon":51},"Domain Events","\u002Fguides\u002Fdomain-events","03.guides\u002Fdomain-events","i-tabler-broadcast",{"title":53,"path":54,"stem":55,"icon":56},"Field visibility","\u002Fguides\u002Ffield-visibility","03.guides\u002Ffield-visibility","i-tabler-eye-off",{"title":58,"path":59,"stem":60,"icon":61},"Lifecycle hooks","\u002Fguides\u002Flifecycle-hooks","03.guides\u002Flifecycle-hooks","i-tabler-arrows-split",{"title":63,"path":64,"stem":65,"icon":66},"Production playground","\u002Fguides\u002Fplayground","03.guides\u002Fplayground","i-tabler-flask",{"title":68,"path":69,"stem":70,"icon":71},"Queries and filters","\u002Fguides\u002Fqueries-and-filters","03.guides\u002Fqueries-and-filters","i-tabler-filter",{"title":73,"path":74,"stem":75,"icon":76},"Relations","\u002Fguides\u002Frelations","03.guides\u002Frelations","i-tabler-link",{"title":78,"path":79,"stem":80,"icon":81},"Schema consistency","\u002Fguides\u002Fschema-consistency","03.guides\u002Fschema-consistency","i-tabler-database-search",{"title":83,"path":84,"stem":85,"icon":86},"Validation","\u002Fguides\u002Fvalidation","03.guides\u002Fvalidation","i-tabler-checkup-list",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":30},"Adapters","i-tabler-plug","\u002Fadapters","04.adapters",[93],{"title":94,"path":95,"stem":96,"icon":97},"Drizzle adapter","\u002Fadapters\u002Fdrizzle","04.adapters\u002Fdrizzle","i-simple-icons-drizzle",{"title":99,"path":100,"stem":101,"icon":102},"Current limitations","\u002Fcurrent-limitations","05.current-limitations","i-tabler-circle-dashed-x",{"id":104,"title":78,"body":105,"description":418,"extension":419,"links":420,"meta":421,"navigation":422,"path":79,"seo":423,"stem":80,"__hash__":424},"docs\u002F03.guides\u002Fschema-consistency.md",{"type":106,"value":107,"toc":413},"minimark",[108,117,277,282,310,355,358,362,376,379,399,402,406,409],[109,110,111,112,116],"p",{},"The consistency checker is read-only. It compares the locked registry with\n",[113,114,115],"code",{},"DatabaseAdapter.introspect()"," and never changes the database.",[118,119,124],"pre",{"className":120,"code":121,"language":122,"meta":123,"style":123},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const checker = createConsistencyChecker(registry, adapter)\nconst drift = await checker.check()\n\nif (drift.length) {\n  for (const table of drift) {\n    console.error(table.table, table.issues)\n  }\n}\n","ts","",[113,125,126,156,182,189,206,232,265,271],{"__ignoreMap":123},[127,128,131,135,139,143,147,150,153],"span",{"class":129,"line":130},"line",1,[127,132,134],{"class":133},"spNyl","const",[127,136,138],{"class":137},"sTEyZ"," checker ",[127,140,142],{"class":141},"sMK4o","=",[127,144,146],{"class":145},"s2Zo4"," createConsistencyChecker",[127,148,149],{"class":137},"(registry",[127,151,152],{"class":141},",",[127,154,155],{"class":137}," adapter)\n",[127,157,159,161,164,166,170,173,176,179],{"class":129,"line":158},2,[127,160,134],{"class":133},[127,162,163],{"class":137}," drift ",[127,165,142],{"class":141},[127,167,169],{"class":168},"s7zQu"," await",[127,171,172],{"class":137}," checker",[127,174,175],{"class":141},".",[127,177,178],{"class":145},"check",[127,180,181],{"class":137},"()\n",[127,183,185],{"class":129,"line":184},3,[127,186,188],{"emptyLinePlaceholder":187},true,"\n",[127,190,192,195,198,200,203],{"class":129,"line":191},4,[127,193,194],{"class":168},"if",[127,196,197],{"class":137}," (drift",[127,199,175],{"class":141},[127,201,202],{"class":137},"length) ",[127,204,205],{"class":141},"{\n",[127,207,209,212,216,218,221,224,227,230],{"class":129,"line":208},5,[127,210,211],{"class":168},"  for",[127,213,215],{"class":214},"swJcz"," (",[127,217,134],{"class":133},[127,219,220],{"class":137}," table",[127,222,223],{"class":141}," of",[127,225,226],{"class":137}," drift",[127,228,229],{"class":214},") ",[127,231,205],{"class":141},[127,233,235,238,240,243,246,249,251,253,255,257,259,262],{"class":129,"line":234},6,[127,236,237],{"class":137},"    console",[127,239,175],{"class":141},[127,241,242],{"class":145},"error",[127,244,245],{"class":214},"(",[127,247,248],{"class":137},"table",[127,250,175],{"class":141},[127,252,248],{"class":137},[127,254,152],{"class":141},[127,256,220],{"class":137},[127,258,175],{"class":141},[127,260,261],{"class":137},"issues",[127,263,264],{"class":214},")\n",[127,266,268],{"class":129,"line":267},7,[127,269,270],{"class":141},"  }\n",[127,272,274],{"class":129,"line":273},8,[127,275,276],{"class":141},"}\n",[278,279,281],"h2",{"id":280},"detected-drift","Detected drift",[283,284,285,289,292,295,298,301,304,307],"ul",{},[286,287,288],"li",{},"missing declared tables;",[286,290,291],{},"missing or unexpected columns;",[286,293,294],{},"mapped type mismatches;",[286,296,297],{},"nullability mismatches;",[286,299,300],{},"primary-key mismatches;",[286,302,303],{},"single-column uniqueness mismatches;",[286,305,306],{},"missing, unexpected or changed declared indexes;",[286,308,309],{},"composite index field order and uniqueness mismatches.",[118,311,313],{"className":120,"code":312,"language":122,"meta":123,"style":123},"interface SchemaDrift {\n  table: string\n  issues: string[]\n}\n",[113,314,315,327,338,351],{"__ignoreMap":123},[127,316,317,320,324],{"class":129,"line":130},[127,318,319],{"class":133},"interface",[127,321,323],{"class":322},"sBMFI"," SchemaDrift",[127,325,326],{"class":141}," {\n",[127,328,329,332,335],{"class":129,"line":158},[127,330,331],{"class":214},"  table",[127,333,334],{"class":141},":",[127,336,337],{"class":322}," string\n",[127,339,340,343,345,348],{"class":129,"line":184},[127,341,342],{"class":214},"  issues",[127,344,334],{"class":141},[127,346,347],{"class":322}," string",[127,349,350],{"class":137},"[]\n",[127,352,353],{"class":129,"line":191},[127,354,276],{"class":141},[109,356,357],{},"An empty array means the currently supported properties match.",[278,359,361],{"id":360},"introspection-boundaries","Introspection boundaries",[109,363,364,365,368,369,372,373,175],{},"PostgreSQL introspection currently reads base tables in the ",[113,366,367],{},"public"," schema,\ncolumns, primary keys and indexes. Single-column unique indexes are surfaced as\n",[113,370,371],{},"ColumnMetadata.unique","; other indexes become ",[113,374,375],{},"TableMetadata.indexes",[109,377,378],{},"It does not reconstruct:",[283,380,381,384,387,390,393,396],{},[286,382,383],{},"validators or lifecycle behavior;",[286,385,386],{},"relation metadata and foreign keys;",[286,388,389],{},"database defaults;",[286,391,392],{},"check constraints;",[286,394,395],{},"non-public schemas and views;",[286,397,398],{},"precision, scale and length details.",[109,400,401],{},"Declared metadata remains the domain source of truth.",[278,403,405],{"id":404},"operational-use","Operational use",[109,407,408],{},"Run the check in CI against a migrated PostgreSQL database, during non-production\nstartup, or as a deployment diagnostic. A clean check complements migrations;\nit does not replace them.",[410,411,412],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":123,"searchDepth":130,"depth":158,"links":414},[415,416,417],{"id":280,"depth":158,"text":281},{"id":360,"depth":158,"text":361},{"id":404,"depth":158,"text":405},"Detect drift between declared metadata and live PostgreSQL tables.","md",null,{},{"icon":81},{"title":78,"description":418},"Lc6eD3YWnaKhwwZDf1TjPnt_Z8NCvIxC5WuRtQNEJDo",[426,428],{"title":73,"path":74,"stem":75,"description":427,"icon":76,"children":-1},"Declare direct relationships and load them explicitly in batches.",{"title":83,"path":84,"stem":85,"description":429,"icon":86,"children":-1},"Validate structure and domain rules before data reaches the adapter.",1783784236256]