[{"data":1,"prerenderedAt":309},["ShallowReactive",2],{"navigation":3,"\u002Foperations\u002Fpostgresql-18-restore-verification":165,"\u002Foperations\u002Fpostgresql-18-restore-verification-surround":304},[4,36,57,113,154],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Install","\u002Fgetting-started\u002Finstall","1.getting-started\u002F2.install","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F3.quickstart","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Testing","\u002Fgetting-started\u002Ftesting","1.getting-started\u002F4.testing","i-lucide-flask-conical",{"title":31,"path":32,"stem":33,"icon":34},"CLI","\u002Fgetting-started\u002Fcli","1.getting-started\u002F5.cli","i-lucide-terminal",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Concepts","i-lucide-boxes","\u002Fconcepts","2.concepts",[42,47,52],{"title":43,"path":44,"stem":45,"icon":46},"SQL-first contract","\u002Fconcepts\u002Fsql-first-contract","2.concepts\u002F1.sql-first-contract","i-lucide-database",{"title":48,"path":49,"stem":50,"icon":51},"Jobs and status","\u002Fconcepts\u002Fjobs-and-status","2.concepts\u002F2.jobs-and-status","i-lucide-list-checks",{"title":53,"path":54,"stem":55,"icon":56},"Fencing and settles","\u002Fconcepts\u002Ffencing-and-settles","2.concepts\u002F3.fencing-and-settles","i-lucide-shield",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":35},"API","i-lucide-code-2","\u002Fapi","3.api",[63,68,73,78,83,88,93,98,103,108],{"title":64,"path":65,"stem":66,"icon":67},"Enqueue","\u002Fapi\u002Fenqueue","3.api\u002F1.enqueue","i-lucide-plus-circle",{"title":69,"path":70,"stem":71,"icon":72},"Trusted Effects","\u002Fapi\u002Ftrusted-effects","3.api\u002F10.trusted-effects","i-lucide-lock-keyhole",{"title":74,"path":75,"stem":76,"icon":77},"Claim and heartbeat","\u002Fapi\u002Fclaim-and-heartbeat","3.api\u002F2.claim-and-heartbeat","i-lucide-hand",{"title":79,"path":80,"stem":81,"icon":82},"Worker and handlers","\u002Fapi\u002Fworker-and-handlers","3.api\u002F3.worker-and-handlers","i-lucide-cpu",{"title":84,"path":85,"stem":86,"icon":87},"HTTP facade","\u002Fapi\u002Fhttp-facade","3.api\u002F4.http-facade","i-lucide-globe",{"title":89,"path":90,"stem":91,"icon":92},"Authorization","\u002Fapi\u002Fauthorization","3.api\u002F5.authorization","i-lucide-key-round",{"title":94,"path":95,"stem":96,"icon":97},"Follow-ups","\u002Fapi\u002Ffollow-ups","3.api\u002F6.follow-ups","i-lucide-git-branch",{"title":99,"path":100,"stem":101,"icon":102},"Workflows and schedules","\u002Fapi\u002Fworkflows-and-schedules","3.api\u002F7.workflows-and-schedules","i-lucide-workflow",{"title":104,"path":105,"stem":106,"icon":107},"Durable admission","\u002Fapi\u002Fdurable-admission","3.api\u002F8.durable-admission","i-lucide-ticket",{"title":109,"path":110,"stem":111,"icon":112},"Workflow Continuations","\u002Fapi\u002Fworkflow-continuations","3.api\u002F9.workflow-continuations","i-lucide-git-fork",{"title":114,"icon":115,"path":116,"stem":117,"children":118,"page":35},"Operations","i-lucide-activity","\u002Foperations","4.operations",[119,124,129,134,139,144,149],{"title":120,"path":121,"stem":122,"icon":123},"Standalone Scheduler","\u002Foperations\u002Fstandalone-scheduler","4.operations\u002F0.standalone-scheduler","i-lucide-calendar-clock",{"title":125,"path":126,"stem":127,"icon":128},"Housekeeping","\u002Foperations\u002Fhousekeeping","4.operations\u002F1.housekeeping","i-lucide-timer",{"title":130,"path":131,"stem":132,"icon":133},"Redrive and dead letters","\u002Foperations\u002Fredrive-and-dlq","4.operations\u002F2.redrive-and-dlq","i-lucide-rotate-ccw",{"title":135,"path":136,"stem":137,"icon":138},"Flow control","\u002Foperations\u002Fflow-control","4.operations\u002F3.flow-control","i-lucide-gauge",{"title":140,"path":141,"stem":142,"icon":143},"Queue Boundaries","\u002Foperations\u002Fqueue-boundaries","4.operations\u002F4.queue-boundaries","i-lucide-panels-top-left",{"title":145,"path":146,"stem":147,"icon":148},"Runtime-first upgrades","\u002Foperations\u002Fruntime-first-upgrades","4.operations\u002F5.runtime-first-upgrades","i-lucide-shield-check",{"title":150,"path":151,"stem":152,"icon":153},"PostgreSQL 18 restore verification","\u002Foperations\u002Fpostgresql-18-restore-verification","4.operations\u002F6.postgresql-18-restore-verification","i-lucide-database-backup",{"title":155,"icon":156,"path":157,"stem":158,"children":159,"page":35},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[160],{"title":161,"path":162,"stem":163,"icon":164},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F1.configuration","i-lucide-settings",{"id":166,"title":150,"body":167,"description":297,"extension":298,"links":299,"meta":300,"navigation":301,"path":151,"seo":302,"stem":152,"__hash__":303},"docs\u002F4.operations\u002F6.postgresql-18-restore-verification.md",{"type":168,"value":169,"toc":293},"minimark",[170,195,214,219,242,274,289],[171,172,173,174,178,179,182,183,186,187,190,191,194],"p",{},"Release ",[175,176,177],"code",{},"0.1.0a41"," makes one narrow change to ",[175,180,181],{},"taskq db verify",": it accepts\nthe equivalent ",[175,184,185],{},"taskq.schedules"," constraint form that PostgreSQL 18 can produce\nwhen reparsing a ",[175,188,189],{},"pg_dump"," \u002F ",[175,192,193],{},"pg_restore"," copy. The restored table still must\nhave the expected 21 constraint identities and definitions. The verifier accepts\nonly the canonical relation digest or the one known alternate digest; all\nother catalog, migration, target-identity, role, ownership, and grant checks\nremain exact. A different result fails closed.",[171,196,197,198,201,202,205,206,209,210,213],{},"The SQL contract remains ",[175,199,200],{},"0.6.12",", Protocol document revision ",[175,203,204],{},"1.0.18",", and\npackaged migrations ",[175,207,208],{},"0001","–",[175,211,212],{},"0048",". There is no change to queue, worker,\nscheduler, HTTP, or authorization behavior. Existing a40 runtimes remain\ncompatible and do not need an upgrade just to validate the restore.",[215,216,218],"h2",{"id":217},"restore-acceptance","Restore acceptance",[220,221,222,226,233,239],"ol",{},[223,224,225],"li",{},"Install the exact published a41 artifact in the operator environment.",[223,227,228,229,232],{},"Reconcile schema and object ownership and grant provenance separately,\nparticularly if the dump was restored with ",[175,230,231],{},"--no-owner --no-acl",".",[223,234,235,236,238],{},"Run ",[175,237,181],{}," against the intended target using an administrative\ncredential and explicit context or target identity.",[223,240,241],{},"Require all 18 packaged verification checks to pass. Investigate any\nremaining mismatch; do not treat this exception as a general drift waiver.",[243,244,250],"pre",{"className":245,"code":246,"filename":247,"language":248,"meta":249,"style":249},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","taskq --context restored-target db verify\n","Terminal","bash","",[175,251,252],{"__ignoreMap":249},[253,254,257,261,265,268,271],"span",{"class":255,"line":256},"line",1,[253,258,260],{"class":259},"sBMFI","taskq",[253,262,264],{"class":263},"sfazB"," --context",[253,266,267],{"class":263}," restored-target",[253,269,270],{"class":263}," db",[253,272,273],{"class":263}," verify\n",[171,275,276,277,284,285,288],{},"See the ",[278,279,283],"a",{"href":280,"rel":281},"https:\u002F\u002Fgithub.com\u002Foutlabsio\u002Foutlabs-taskq\u002Fblob\u002Fmain\u002Fdocs\u002FRELEASE-0.1.0a41.md",[282],"nofollow","a41 release record","\nfor the exact digest allowance and validation scope. Follow the\n",[278,286,287],{"href":146},"runtime-first sequence"," when a separate\nrelease changes the SQL contract.",[290,291,292],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}",{"title":249,"searchDepth":256,"depth":294,"links":295},2,[296],{"id":217,"depth":294,"text":218},"Verify a TaskQ database after pg_dump and pg_restore without relaxing role or catalog checks.","md",null,{},{"icon":153},{"title":150,"description":297},"Vr-mrXOaQVBBOvZbkpsVT-X4xCCa4m_NSL26fDPj5Wc",[305,307],{"title":145,"path":146,"stem":147,"description":306,"icon":148,"children":-1},"Upgrade every compatible runtime before applying a forward-only TaskQ SQL contract.",{"title":161,"path":162,"stem":163,"description":308,"icon":164,"children":-1},"Queue profiles and WorkerSettings \u002F TASKQ_* knobs.",1790159947022]