"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[7886],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=l(r),g=a,m=c["".concat(p,".").concat(g)]||c[g]||d[g]||o;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=g;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:a,i[1]=s;for(var l=2;l<o;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},83876:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=r(83117),a=(r(67294),r(3905));const o={title:"Upgrading Superset",hide_title:!0,sidebar_position:8,version:1},i=void 0,s={unversionedId:"installation/upgrading-superset",id:"installation/upgrading-superset",title:"Upgrading Superset",description:"Upgrading Superset",source:"@site/docs/installation/upgrading-superset.mdx",sourceDirName:"installation",slug:"/installation/upgrading-superset",permalink:"/docs/installation/upgrading-superset",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/installation/upgrading-superset.mdx",tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Upgrading Superset",hide_title:!0,sidebar_position:8,version:1},sidebar:"tutorialSidebar",previous:{title:"Event Logging",permalink:"/docs/installation/event-logging"},next:{title:"Async Queries via Celery",permalink:"/docs/installation/async-queries-celery"}},p={},l=[{value:"Upgrading Superset",id:"upgrading-superset",level:2},{value:"Docker Compose",id:"docker-compose",level:3},{value:"Updating Superset Manually",id:"updating-superset-manually",level:3}],u={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"upgrading-superset"},"Upgrading Superset"),(0,a.kt)("h3",{id:"docker-compose"},"Docker Compose"),(0,a.kt)("p",null,"First make sure to wind down the running containers in Docker Compose:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker compose down\n")),(0,a.kt)("p",null,"Then, update the folder that mirrors the ",(0,a.kt)("inlineCode",{parentName:"p"},"superset")," repo through git:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd superset/\ngit pull origin master\n")),(0,a.kt)("p",null,"Then, restart the containers and any changed Docker images will be automatically pulled down:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker compose up\n")),(0,a.kt)("h3",{id:"updating-superset-manually"},"Updating Superset Manually"),(0,a.kt)("p",null,"To upgrade superset in a native installation, run the following commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"pip install apache-superset --upgrade\nsuperset db upgrade\nsuperset init\n")),(0,a.kt)("p",null,"While upgrading superset should not delete your charts and dashboards, we recommend following best\npractices and to backup your metadata database before upgrading. Before upgrading production, we\nrecommend upgrading in a staging environment and upgrading production finally during off-peak usage."))}d.isMDXComponent=!0}}]);