π¨ Critical: Before proceeding, create a complete backup of your metadata. This backup serves as your safety net for rolling back if needed. Refer to the βBack up and Restoreβ section below for comprehensive backup procedures.
The procedure depends on where Bytebase stores its metadata:
Embedded PostgreSQL β the default. You did not set PG_URL, and the metadata lives in the data directory mounted into the container. Back up that directory.
External PostgreSQL β you set PG_URL, and the metadata lives in the database named in that connection string. Clone that database.
The embedded PostgreSQL listens only on a Unix socket inside the container and shuts down together with Bytebase, so it cannot be cloned from another host. Back up the mounted data directory instead.The examples below assume the docker run command from Deploy with Docker, which mounts ~/.bytebase/data at /var/opt/bytebase. Substitute your own host path.
Start Bytebase with the previous version (the version you were running before the failed upgrade).
After confirming successful restoration, remove ~/.bytebase/data.old.
Restore as root, and with a command that preserves ownership β tar as root and cp -a both do, a plain cp -r does not. Bytebase repairs the permissions of the data directory itself, but not the ownership of the files inside it, and PostgreSQL refuses to start when it does not own them.
Replace <dbname> in the statements below with the database named in your PG_URL β the same value you supplied when you configured External PostgreSQL. To check which one you are using:
Connect to another database on the same PostgreSQL server β postgres always exists β and clone the metadata database:
CREATE DATABASE <dbname>_backup WITH TEMPLATE <dbname>;
WITH TEMPLATE requires that no other session is connected to the source database. Stop Bytebase first, or PostgreSQL fails with source database ... is being accessed by other users.
CREATE DATABASE <dbname> WITH TEMPLATE <dbname>_backup;
Start Bytebase with the previous version (the version you were running before the failed upgrade).
After confirming successful restoration, remove temporary databases:
DROP DATABASE <dbname>_old;DROP DATABASE <dbname>_backup;
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bytebase Docs","colors":{"primary":"#2b66ff","light":"#4faaff","dark":"#1c49be"},"logo":{"light":"https://mintcdn.com/dbx/vw8BbfZhlW9y-cr_/images/logo/logo-full.png?fit=max\u0026auto=format\u0026n=vw8BbfZhlW9y-cr_\u0026q=85\u0026s=894c5021793b82b6bcef8b09cef3d85d","dark":"https://mintcdn.com/dbx/vw8BbfZhlW9y-cr_/images/logo/logo-full-white.png?fit=max\u0026auto=format\u0026n=vw8BbfZhlW9y-cr_\u0026q=85\u0026s=9f660755d7e64c8f3d4882e66589af29"},"favicon":"https://mintcdn.com/dbx/otHCKEZkOwO4gA2D/favicon.svg?fit=max\u0026auto=format\u0026n=otHCKEZkOwO4gA2D\u0026q=85\u0026s=a7e205f761697f5ffcec570fa5de78b0","navbar":{"links":[{"href":"https://www.bytebase.com","label":"bytebase.com"}],"primary":{"type":"button","label":"Try Cloud","href":"https://cloud.bytebase.com/"}},"footer":{"socials":{"x":"https://x.com/bytebase","github":"https://github.com/bytebase/bytebase","linkedin":"https://linkedin.com/company/bytebase"}},"seo":{"metatags":{"canonical":"https://docs.bytebase.com"}},"icons":{"library":"lucide"},"integrations":{"ga4":{"measurementId":"G-4BZ4JH7449"}},"errors":{"404":{"redirect":false}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dbx","hasAudioNarration":false,"actualSubdomain":"dbx","customDomains":["docs.bytebase.com"],"gitSource":{"type":"github","owner":"bytebase","repo":"bytebase.com","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae03028c71f9056d945c05b","collectionId":"ff67c486-1c2b-4d7a-a0ba-22e76946bc7c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae03028c71f9056d945c05b"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae03028c71f9056d945c05b","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Changelog","count":53},{"language":"default","tag":"Change Management","count":46},{"language":"default","tag":"Get Started","count":43},{"language":"default","tag":"Tutorials","count":41},{"language":"default","tag":"Administration","count":32},{"language":"default","tag":"GitOps Workflow","count":24},{"language":"default","tag":"Access Control","count":23},{"language":"default","tag":"Security","count":19},{"language":"default","tag":"UI-Driven Workflow","count":15},{"language":"default","tag":"Install","count":11}]},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false,"deflection":{"enabled":true,"email":"help@bytebase.com"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"demo-embed.css","content":".demo-embed{position:relative;display:block;margin:1.5rem 0;border:0;border-radius:0;cursor:zoom-in;text-decoration:none!important}.demo-embed img{display:block;width:100%;margin:0!important;border-radius:0!important}.demo-embed::after{content:\"Play the interactive demo\";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:.5rem .875rem .5rem 2.25rem;border:1px solid rgb(228 228 231);border-radius:9999px;background:rgb(255 255 255/.96) no-repeat .875rem center/1rem 1rem url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2318181b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3'/%3E%3C/svg%3E\");color:rgb(24 24 27);font-size:.8125rem;font-weight:500;line-height:1.25rem;box-shadow:0 2px 8px rgb(0 0 0/.12);transition:transform .15s ease}.demo-embed:hover::after{transform:translate(-50%,-50%) scale(1.04)}.demo-dialog{position:fixed;inset:0;margin:auto;width:min(96vw,calc((100vh - 5rem)*792/480),1352px);max-width:none;max-height:none;padding:0;border:0;background:0 0;box-shadow:none;overflow:visible}.demo-dialog::backdrop{background:rgb(255 255 255/.85);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}html.dark .demo-dialog::backdrop{background:rgb(9 9 11/.85)}.demo-dialog iframe{display:block;width:100%;aspect-ratio:792/480;border:0}.demo-dialog__close{position:fixed;top:1rem;right:1rem;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border:1px solid rgb(228 228 231);border-radius:9999px;background:#fff;color:rgb(24 24 27);font-size:1.25rem;line-height:1;cursor:pointer}html.dark .demo-dialog__close{border-color:rgb(63 63 70);background:rgb(24 24 27);color:#fff}"}],"page":{"pagePath":"get-started/self-host/upgrade","slug":"/get-started/self-host/upgrade","pageMetadata":{"title":"Upgrade","description":null,"href":"/get-started/self-host/upgrade"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`upgrade-process`,children:`Upgrade Process`}),`\n`,_jsxs(_components.p,{children:[`This guide walks through upgrading Bytebase with Docker. `,_jsx(_components.strong,{children:`Complete each step sequentially to ensure a smooth and safe upgrade:`})]}),`\n`,_jsx(Heading,{level:`3`,id:`step-1-stop-and-remove-the-existing-container`,children:`Step 1: Stop and Remove the Existing Container`}),`\n`,_jsx(_components.p,{children:`First, gracefully stop and remove your current Bytebase container. This prevents data corruption by ensuring no concurrent access to the metadata.`}),`\n`,_jsx(Heading,{level:`3`,id:`step-2-back-up-your-metadata`,children:`Step 2: Back Up Your Metadata`}),`\n`,_jsxs(_components.p,{children:[`π¨ `,_jsx(_components.strong,{children:`Critical:`}),` Before proceeding, create a complete backup of your metadata. This backup serves as your safety net for rolling back if needed. Refer to the βBack up and Restoreβ section below for comprehensive backup procedures.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-3-launch-the-updated-version`,children:`Step 3: Launch the Updated Version`}),`\n`,_jsx(_components.p,{children:`Start Bytebase with the new version using your existing Docker run command, updating only the image tag to the desired version.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Production Safety:`}),` Validate your upgrade procedure in a staging environment before executing it in production.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`back-up-and-restore`,children:`Back up and Restore`}),`\n`,_jsx(_components.p,{children:`The procedure depends on where Bytebase stores its metadata:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Embedded PostgreSQL`}),` β the default. You did not set `,_jsx(_components.code,{children:`PG_URL`}),`, and the metadata lives in the data directory mounted into the container. Back up that directory.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/get-started/self-host/external-postgres/`,children:`External PostgreSQL`})}),` β you set `,_jsx(_components.code,{children:`PG_URL`}),`, and the metadata lives in the database named in that connection string. Clone that database.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`embedded-postgresql`,children:`Embedded PostgreSQL`}),`\n`,_jsx(_components.p,{children:`The embedded PostgreSQL listens only on a Unix socket inside the container and shuts down together with Bytebase, so it cannot be cloned from another host. Back up the mounted data directory instead.`}),`\n`,_jsxs(_components.p,{children:[`The examples below assume the `,_jsx(_components.code,{children:`docker run`}),` command from `,_jsx(_components.a,{href:`/get-started/self-host/deploy-with-docker/`,children:`Deploy with Docker`}),`, which mounts `,_jsx(_components.code,{children:`~/.bytebase/data`}),` at `,_jsx(_components.code,{children:`/var/opt/bytebase`}),`. Substitute your own host path.`]}),`\n`,_jsx(Heading,{level:`4`,id:`back-up-the-data-directory`,children:`Back Up the Data Directory`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Stop Bytebase so PostgreSQL shuts down cleanly:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` bytebase`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`docker rm bytebase`}),` if you did not start the container with `,_jsx(_components.code,{children:`--rm`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Copy the host directory somewhere safe. An archive travels well:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tar`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` czf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/bytebase-backup-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`date`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +%Y%m%d`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.tar.gz`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`A plain directory copy is equally valid for a local rollback, as long as it preserves ownership and permissions:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/bytebase-backup`})]}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Copy the directory only while Bytebase is stopped. A copy taken from a running instance captures PostgreSQL mid-write and may not restore.`})}),`\n`,_jsx(Heading,{level:`4`,id:`restore-the-data-directory`,children:`Restore the Data Directory`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Stop your Bytebase instance completely.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Move the current data directory aside rather than deleting it, then put the backup in its place:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data.old`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mkdir`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tar`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` xzf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/bytebase-backup-`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`dat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.tar.gz`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`From a directory copy instead:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/bytebase-backup/.`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.bytebase/data`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Start Bytebase with the previous version (the version you were running before the failed upgrade).`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`After confirming successful restoration, remove `,_jsx(_components.code,{children:`~/.bytebase/data.old`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Restore as root, and with a command that preserves ownership β `,_jsx(_components.code,{children:`tar`}),` as root and `,_jsx(_components.code,{children:`cp -a`}),` both do, a plain `,_jsx(_components.code,{children:`cp -r`}),` does not. Bytebase repairs the permissions of the data directory itself, but not the ownership of the files inside it, and PostgreSQL refuses to start when it does not own them.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`external-postgresql`,children:`External PostgreSQL`}),`\n`,_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`\u003cdbname>`}),` in the statements below with the database named in your `,_jsx(_components.code,{children:`PG_URL`}),` β the same value you supplied when you `,_jsx(_components.a,{href:`/get-started/self-host/external-postgres/`,children:`configured External PostgreSQL`}),`. To check which one you are using:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`psql`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$PG_URL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'SELECT current_database();'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`back-up-the-metadata-database`,children:`Back Up the Metadata Database`}),`\n`,_jsxs(_components.p,{children:[`Connect to another database on the same PostgreSQL server β `,_jsx(_components.code,{children:`postgres`}),` always exists β and clone the metadata database:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`_backup `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`WITH`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` TEMPLATE `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`WITH TEMPLATE`}),` requires that no other session is connected to the source database. Stop Bytebase first, or PostgreSQL fails with `,_jsx(_components.code,{children:`source database ... is being accessed by other users`}),`.`]})}),`\n`,_jsx(Heading,{level:`4`,id:`restore-the-metadata-database`,children:`Restore the Metadata Database`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Stop your Bytebase instance completely.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Preserve the current database by renaming it:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ALTER`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RENAME `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`TO`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`_old;`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Restore from your backup:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` WITH`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` TEMPLATE `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`_backup;`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Start Bytebase with the previous version (the version you were running before the failed upgrade).`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`After confirming successful restoration, remove temporary databases:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`DROP`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`_old;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`DROP`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dbname`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`_backup;`})]}),`\n`]})})}),`\n`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Upgrade","description":null,"href":"/get-started/self-host/upgrade"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Upgrade Process","slug":"upgrade-process","depth":2,"children":[{"title":"Step 1: Stop and Remove the Existing Container","slug":"step-1-stop-and-remove-the-existing-container","depth":3,"children":[]},{"title":"Step 2: Back Up Your Metadata","slug":"step-2-back-up-your-metadata","depth":3,"children":[]},{"title":"Step 3: Launch the Updated Version","slug":"step-3-launch-the-updated-version","depth":3,"children":[]}]},{"title":"Back up and Restore","slug":"back-up-and-restore","depth":2,"children":[{"title":"Embedded PostgreSQL","slug":"embedded-postgresql","depth":3,"children":[]},{"title":"Back Up the Data Directory","slug":"back-up-the-data-directory","depth":4,"children":[]},{"title":"Restore the Data Directory","slug":"restore-the-data-directory","depth":4,"children":[]},{"title":"External PostgreSQL","slug":"external-postgresql","depth":3,"children":[]},{"title":"Back Up the Metadata Database","slug":"back-up-the-metadata-database","depth":4,"children":[]},{"title":"Restore the Metadata Database","slug":"restore-the-metadata-database","depth":4,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dbx/9053740759cb8dde/demo-embed.js"],"subdomain":"dbx","siteName":"Bytebase Docs","title":"Upgrade - Bytebase Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T16:36:47.252Z","originalFileLocation":"get-started/self-host/upgrade.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Bytebase Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upgrade - Bytebase Docs\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bytebase Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bytebase.com/get-started/self-host/upgrade\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dbx.mintlify.app/_mintlify/api/og/v2?division=Self-Host\u0026amp;title=Upgrade\u0026amp;theme=83d7e50c9104a5d993880fba\u0026amp;signature=25ca1311b39694595b6e6fa53bc245e6f3910e0743ed2ebf254e5cc193380264\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Upgrade - Bytebase Docs\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dbx.mintlify.app/_mintlify/api/og/v2?division=Self-Host\u0026amp;title=Upgrade\u0026amp;theme=83d7e50c9104a5d993880fba\u0026amp;signature=25ca1311b39694595b6e6fa53bc245e6f3910e0743ed2ebf254e5cc193380264\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dbx/R2-p_QktkMNyxiB0/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bytebase Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2b66ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bytebase.com/get-started/self-host/upgrade\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/get-started/self-host/upgrade.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bytebase.com/#organization\",\"name\":\"Bytebase Docs\",\"url\":\"https://docs.bytebase.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dbx/vw8BbfZhlW9y-cr_/images/logo/logo-full.png?fit=max\u0026auto=format\u0026n=vw8BbfZhlW9y-cr_\u0026q=85\u0026s=894c5021793b82b6bcef8b09cef3d85d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bytebase.com#website\",\"name\":\"Bytebase Docs\",\"url\":\"https://docs.bytebase.com\",\"publisher\":{\"@id\":\"https://docs.bytebase.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bytebase.com/get-started/self-host/upgrade#webpage\",\"url\":\"https://docs.bytebase.com/get-started/self-host/upgrade\",\"name\":\"Upgrade\",\"dateModified\":\"2026-10-22T16:36:47.252Z\",\"isPartOf\":{\"@id\":\"https://docs.bytebase.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bytebase.com/get-started/self-host/upgrade#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bytebase.com/get-started/self-host/upgrade#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Install\",\"item\":\"https://docs.bytebase.com/get-started/self-host-vs-cloud\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-Host\",\"item\":\"https://docs.bytebase.com/get-started/self-host/deploy-with-docker\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Upgrade\",\"item\":\"https://docs.bytebase.com/get-started/self-host/upgrade\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.bytebase.com/get-started/self-host/upgrade#article\",\"headline\":\"Upgrade\",\"name\":\"Upgrade\",\"url\":\"https://docs.bytebase.com/get-started/self-host/upgrade\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bytebase.com/get-started/self-host/upgrade#webpage\"},\"dateModified\":\"2026-10-22T16:36:47.252Z\",\"publisher\":{\"@id\":\"https://docs.bytebase.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bytebase.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bytebase Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Bytebase Docs","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Get Started","groups":[{"group":"Introduction","pages":[{"title":"What's Bytebase","href":"/introduction/what-is-bytebase"},{"title":"Supported Databases","href":"/introduction/supported-databases"},{"title":"Use Cases","href":"/introduction/use-cases"},{"title":"FAQ","href":"/faq"}]},{"group":"Quick Start","pages":[{"title":"Step 1: Start Bytebase","href":"/get-started/step-by-step/start-bytebase"},{"title":"Step 2: Connect a Database","href":"/get-started/step-by-step/add-an-instance"},{"title":"Step 3: Create a Project","href":"/get-started/step-by-step/create-a-project"},{"title":"Step 4: Change Schema","href":"/get-started/step-by-step/change-schema"},{"title":"Step 5: Query Data","href":"/get-started/step-by-step/query-data"}]},{"group":"Bytebase Essentials","pages":[{"title":"Bytebase Essentials","sidebarTitle":"Overview","href":"/concepts/overview"},{"group":"Core Concepts","pages":[{"title":"Project","href":"/concepts/project"},{"title":"Instance","href":"/concepts/instance"},{"title":"Database","href":"/concepts/database"},{"title":"Environment","href":"/concepts/environment"},{"title":"Plan","href":"/concepts/plan"},{"title":"Issue","href":"/concepts/issue"},{"title":"Release","href":"/concepts/release"},{"title":"Rollout","href":"/concepts/rollout"},{"title":"SQL Review","href":"/concepts/sql-review"}]}]},{"group":"Install","pages":[{"title":"Self-Host vs Cloud","href":"/get-started/self-host-vs-cloud"},{"title":"Cloud","href":"/get-started/cloud"},{"group":"Self-Host","pages":[{"title":"Deploy with Docker","href":"/get-started/self-host/deploy-with-docker"},{"title":"Deploy with Kubernetes","href":"/get-started/self-host/deploy-with-kubernetes"},{"title":"Configure External PostgreSQL","href":"/get-started/self-host/external-postgres"},{"title":"High Availability","href":"/get-started/self-host/high-availability"},{"title":"Network Architecture and External Access","href":"/get-started/self-host/network-architecture"},{"title":"External Access Configuration","href":"/get-started/self-host/external-access"},{"title":"Configure External URL","href":"/get-started/self-host/external-url"},{"title":"Production Setup","description":null,"href":"/get-started/self-host/production-setup"},{"title":"Upgrade","href":"/get-started/self-host/upgrade"}]}]},{"group":"Connect Databases","pages":[{"title":"Overview","description":null,"href":"/get-started/connect/overview"},{"group":"Database Engines","pages":[{"title":"MySQL","href":"/get-started/connect/mysql"},{"title":"PostgreSQL","href":"/get-started/connect/postgresql"},{"title":"Oracle","href":"/get-started/connect/oracle"},{"title":"SQL Server","href":"/get-started/connect/sql-server"},{"title":"MongoDB","href":"/get-started/connect/mongodb"}]},{"group":"Cloud Providers","pages":[{"title":"AWS Database Connections","sidebarTitle":"AWS","href":"/get-started/connect/aws"},{"title":"Azure Database Connections","sidebarTitle":"Azure","href":"/get-started/connect/azure"},{"title":"GCP Database Connections","sidebarTitle":"GCP","href":"/get-started/connect/gcp"}]}]},{"group":"Onboarding Guides","pages":[{"title":"Onboarding Plan","href":"/onboarding/plan"},{"title":"POC Checklist","href":"/onboarding/poc"},{"title":"SQL Editor Data Access Control","href":"/onboarding/sql-editor-data-access-control"},{"title":"Organize Resources","href":"/onboarding/organize-resources"}]}]},{"tab":"Change Management","pages":[{"title":"Change Management","href":"/change-database/change-workflow"}]},{"tab":"Access Control","pages":[{"title":"Access Control","href":"/security/database-permission/overview"}]},{"tab":"Administration","pages":[{"title":"Administration","href":"/ai-assistant"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials/risks-best-practice"}]},{"tab":"API Reference","href":"https://api.bytebase.com"},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/bytebase-3-24-0"}]}]},"title":"Upgrade - Bytebase Docs","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}