[{"data":1,"prerenderedAt":1060},["ShallowReactive",2],{"navigation_docs_en":3,"-en-self-hosting-postgres":427,"-en-self-hosting-postgres-surround":1055},[4,31,117,188,238,271,310,369,378],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":30},"Getting started","i-hugeicons-rocket-01","\u002Fen\u002Fgetting-started","en\u002F01.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"What is DDM?","\u002Fen\u002Fgetting-started\u002Fwhat-is-ddm","en\u002F01.getting-started\u002F01.what-is-ddm","i-hugeicons-information-circle",{"title":16,"path":17,"stem":18,"icon":19},"Account and sign-in","\u002Fen\u002Fgetting-started\u002Fsign-in","en\u002F01.getting-started\u002F02.sign-in","i-hugeicons-key-01",{"title":21,"path":22,"stem":23,"icon":24},"AI in DDM","\u002Fen\u002Fgetting-started\u002Fai-in-ddm","en\u002F01.getting-started\u002F03.ai-in-ddm","i-hugeicons-ai-magic",{"title":26,"path":27,"stem":28,"icon":29},"System status","\u002Fen\u002Fgetting-started\u002Fsystem-status","en\u002F01.getting-started\u002F04.system-status","i-hugeicons-activity-03",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"CMS","i-hugeicons-dashboard-square-01","\u002Fen\u002Fcms","en\u002F02.cms",[37,42,47,52,57,62,67,72,77,82,87,92,97,102,107,112],{"title":38,"path":39,"stem":40,"icon":41},"The CMS at a glance","\u002Fen\u002Fcms\u002Foverview","en\u002F02.cms\u002F01.overview","i-hugeicons-compass-01",{"title":43,"path":44,"stem":45,"icon":46},"Uploading documents","\u002Fen\u002Fcms\u002Fupload","en\u002F02.cms\u002F02.upload","i-hugeicons-upload-01",{"title":48,"path":49,"stem":50,"icon":51},"Categories","\u002Fen\u002Fcms\u002Fcategories","en\u002F02.cms\u002F03.categories","i-hugeicons-folder-tree",{"title":53,"path":54,"stem":55,"icon":56},"Editing documents","\u002Fen\u002Fcms\u002Fdocuments","en\u002F02.cms\u002F04.documents","i-hugeicons-file-edit",{"title":58,"path":59,"stem":60,"icon":61},"Searching and filtering","\u002Fen\u002Fcms\u002Fsearch-and-filters","en\u002F02.cms\u002F05.search-and-filters","i-hugeicons-search-01",{"title":63,"path":64,"stem":65,"icon":66},"Groups and permissions","\u002Fen\u002Fcms\u002Fgroups-and-permissions","en\u002F02.cms\u002F06.groups-and-permissions","i-hugeicons-user-multiple",{"title":68,"path":69,"stem":70,"icon":71},"Users","\u002Fen\u002Fcms\u002Fusers","en\u002F02.cms\u002F07.users","i-hugeicons-user-add-01",{"title":73,"path":74,"stem":75,"icon":76},"Approvals","\u002Fen\u002Fcms\u002Fapprovals","en\u002F02.cms\u002F08.approvals","i-hugeicons-checkmark-badge-01",{"title":78,"path":79,"stem":80,"icon":81},"Markets and translations","\u002Fen\u002Fcms\u002Fmarkets-and-translations","en\u002F02.cms\u002F09.markets-and-translations","i-hugeicons-globe-02",{"title":83,"path":84,"stem":85,"icon":86},"Note templates","\u002Fen\u002Fcms\u002Fnote-templates","en\u002F02.cms\u002F10.note-templates","i-hugeicons-layout-01",{"title":88,"path":89,"stem":90,"icon":91},"Usage and audit log","\u002Fen\u002Fcms\u002Fusage-and-audit","en\u002F02.cms\u002F11.usage-and-audit","i-hugeicons-chart-column",{"title":93,"path":94,"stem":95,"icon":96},"AI assistant","\u002Fen\u002Fcms\u002Fassistant","en\u002F02.cms\u002F12.assistant","i-hugeicons-sparkles",{"title":98,"path":99,"stem":100,"icon":101},"Settings","\u002Fen\u002Fcms\u002Fsettings","en\u002F02.cms\u002F13.settings","i-hugeicons-settings-02",{"title":103,"path":104,"stem":105,"icon":106},"Plans","\u002Fen\u002Fcms\u002Fplans","en\u002F02.cms\u002F14.plans","i-hugeicons-package",{"title":108,"path":109,"stem":110,"icon":111},"Feature requests","\u002Fen\u002Fcms\u002Ffeature-requests","en\u002F02.cms\u002F15.feature-requests","i-hugeicons-idea-01",{"title":113,"path":114,"stem":115,"icon":116},"Report a bug","\u002Fen\u002Fcms\u002Fbug-reports","en\u002F02.cms\u002F16.bug-reports","i-hugeicons-bug-01",{"title":118,"icon":119,"path":120,"stem":121,"children":122,"page":30},"App","i-hugeicons-smart-phone-01","\u002Fen\u002Fapp","en\u002F03.app",[123,128,133,138,143,147,152,157,162,167,170,173,176,179,184],{"title":124,"path":125,"stem":126,"icon":127},"Signing in and finding your way","\u002Fen\u002Fapp\u002Foverview","en\u002F03.app\u002F01.overview","i-hugeicons-login-03",{"title":129,"path":130,"stem":131,"icon":132},"Tabs and split view","\u002Fen\u002Fapp\u002Ftabs","en\u002F03.app\u002F02.tabs","i-hugeicons-layout-2-column",{"title":134,"path":135,"stem":136,"icon":137},"Finding and reading documents","\u002Fen\u002Fapp\u002Fdocuments","en\u002F03.app\u002F03.documents","i-hugeicons-file-01",{"title":139,"path":140,"stem":141,"icon":142},"Favorites","\u002Fen\u002Fapp\u002Ffavorites","en\u002F03.app\u002F04.favorites","i-hugeicons-favourite",{"title":144,"path":145,"stem":146,"icon":61},"Searching","\u002Fen\u002Fapp\u002Fsearch","en\u002F03.app\u002F05.search",{"title":148,"path":149,"stem":150,"icon":151},"Notes","\u002Fen\u002Fapp\u002Fnotes","en\u002F03.app\u002F06.notes","i-hugeicons-note-edit",{"title":153,"path":154,"stem":155,"icon":156},"Calendar and appointments","\u002Fen\u002Fapp\u002Fcalendar","en\u002F03.app\u002F07.calendar","i-hugeicons-calendar-03",{"title":158,"path":159,"stem":160,"icon":161},"Sending to customers","\u002Fen\u002Fapp\u002Foutbox","en\u002F03.app\u002F08.outbox","i-hugeicons-sent",{"title":163,"path":164,"stem":165,"icon":166},"Working offline","\u002Fen\u002Fapp\u002Foffline","en\u002F03.app\u002F09.offline","i-hugeicons-wifi-off-01",{"title":93,"path":168,"stem":169,"icon":96},"\u002Fen\u002Fapp\u002Fassistant","en\u002F03.app\u002F10.assistant",{"title":98,"path":171,"stem":172,"icon":101},"\u002Fen\u002Fapp\u002Fsettings","en\u002F03.app\u002F11.settings",{"title":108,"path":174,"stem":175,"icon":111},"\u002Fen\u002Fapp\u002Ffeature-requests","en\u002F03.app\u002F12.feature-requests",{"title":113,"path":177,"stem":178,"icon":116},"\u002Fen\u002Fapp\u002Fbug-reports","en\u002F03.app\u002F13.bug-reports",{"title":180,"path":181,"stem":182,"icon":183},"Desktop app","\u002Fen\u002Fapp\u002Fdesktop-app","en\u002F03.app\u002F14.desktop-app","i-hugeicons-computer",{"title":185,"path":186,"stem":187,"icon":119},"Mobile app","\u002Fen\u002Fapp\u002Fmobile-app","en\u002F03.app\u002F15.mobile-app",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":30},"Sign-in & directories","i-hugeicons-security-check","\u002Fen\u002Fsign-in-and-directories","en\u002F04.sign-in-and-directories",[194,198,202,207,212,217,222,226,230,234],{"title":195,"path":196,"stem":197,"icon":19},"Sign-in methods","\u002Fen\u002Fsign-in-and-directories\u002Fsign-in-methods","en\u002F04.sign-in-and-directories\u002F01.sign-in-methods",{"title":199,"path":200,"stem":201,"icon":190},"Single sign-on","\u002Fen\u002Fsign-in-and-directories\u002Fsingle-sign-on","en\u002F04.sign-in-and-directories\u002F02.single-sign-on",{"title":203,"path":204,"stem":205,"icon":206},"Directory services (LDAP)","\u002Fen\u002Fsign-in-and-directories\u002Fdirectory-services","en\u002F04.sign-in-and-directories\u002F03.directory-services","i-hugeicons-hierarchy",{"title":208,"path":209,"stem":210,"icon":211},"Synchronisation and sign-in","\u002Fen\u002Fsign-in-and-directories\u002Fdirectory-sync","en\u002F04.sign-in-and-directories\u002F04.directory-sync","i-hugeicons-refresh",{"title":213,"path":214,"stem":215,"icon":216},"Microsoft Entra ID","\u002Fen\u002Fsign-in-and-directories\u002Fmicrosoft-entra-id","en\u002F04.sign-in-and-directories\u002F05.microsoft-entra-id","i-hugeicons-building-03",{"title":218,"path":219,"stem":220,"icon":221},"Okta","\u002Fen\u002Fsign-in-and-directories\u002Fokta","en\u002F04.sign-in-and-directories\u002F06.okta","i-hugeicons-finger-print",{"title":223,"path":224,"stem":225,"icon":81},"Google Workspace","\u002Fen\u002Fsign-in-and-directories\u002Fgoogle-workspace","en\u002F04.sign-in-and-directories\u002F07.google-workspace",{"title":227,"path":228,"stem":229,"icon":119},"Two-factor authentication","\u002Fen\u002Fsign-in-and-directories\u002Ftwo-factor-authentication","en\u002F04.sign-in-and-directories\u002F08.two-factor-authentication",{"title":231,"path":232,"stem":233,"icon":221},"Passkeys","\u002Fen\u002Fsign-in-and-directories\u002Fpasskeys","en\u002F04.sign-in-and-directories\u002F09.passkeys",{"title":235,"path":236,"stem":237,"icon":156},"Calendar access","\u002Fen\u002Fsign-in-and-directories\u002Fcalendar-access","en\u002F04.sign-in-and-directories\u002F10.calendar-access",{"title":239,"icon":240,"path":241,"stem":242,"children":243,"page":30},"MCP server","i-hugeicons-ai-network","\u002Fen\u002Fmcp-server","en\u002F05.mcp-server",[244,248,253,257,262,266],{"title":245,"path":246,"stem":247,"icon":240},"Overview","\u002Fen\u002Fmcp-server\u002Foverview","en\u002F05.mcp-server\u002F01.overview",{"title":249,"path":250,"stem":251,"icon":252},"Setup","\u002Fen\u002Fmcp-server\u002Fsetup","en\u002F05.mcp-server\u002F02.setup","i-hugeicons-plug-socket",{"title":254,"path":255,"stem":256,"icon":111},"What you can do with it","\u002Fen\u002Fmcp-server\u002Fuse-cases","en\u002F05.mcp-server\u002F03.use-cases",{"title":258,"path":259,"stem":260,"icon":261},"Tools","\u002Fen\u002Fmcp-server\u002Ftools","en\u002F05.mcp-server\u002F04.tools","i-hugeicons-wrench-01",{"title":263,"path":264,"stem":265,"icon":76},"Approving changes","\u002Fen\u002Fmcp-server\u002Fapproving-changes","en\u002F05.mcp-server\u002F05.approving-changes",{"title":267,"path":268,"stem":269,"icon":270},"Administration & security","\u002Fen\u002Fmcp-server\u002Fadmin-and-security","en\u002F05.mcp-server\u002F06.admin-and-security","i-hugeicons-shield-key",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":30},"External sources","i-hugeicons-database-sync","\u002Fen\u002Fexternal-sources","en\u002F06.external-sources",[277,280,285,290,295,300,305],{"title":245,"path":278,"stem":279,"icon":273},"\u002Fen\u002Fexternal-sources\u002Foverview","en\u002F06.external-sources\u002F01.overview",{"title":281,"path":282,"stem":283,"icon":284},"SharePoint","\u002Fen\u002Fexternal-sources\u002Fsharepoint","en\u002F06.external-sources\u002F02.sharepoint","i-hugeicons-microsoft",{"title":286,"path":287,"stem":288,"icon":289},"OneDrive","\u002Fen\u002Fexternal-sources\u002Fonedrive","en\u002F06.external-sources\u002F03.onedrive","i-hugeicons-folder-cloud",{"title":291,"path":292,"stem":293,"icon":294},"Google Drive","\u002Fen\u002Fexternal-sources\u002Fgoogle-drive","en\u002F06.external-sources\u002F04.google-drive","i-hugeicons-google-drive",{"title":296,"path":297,"stem":298,"icon":299},"FTP \u002F SFTP","\u002Fen\u002Fexternal-sources\u002Fftp-sftp","en\u002F06.external-sources\u002F05.ftp-sftp","i-hugeicons-server-stack-01",{"title":301,"path":302,"stem":303,"icon":304},"REST interface","\u002Fen\u002Fexternal-sources\u002Frest","en\u002F06.external-sources\u002F06.rest","i-hugeicons-api",{"title":306,"path":307,"stem":308,"icon":309},"SOAP interface","\u002Fen\u002Fexternal-sources\u002Fsoap","en\u002F06.external-sources\u002F07.soap","i-hugeicons-source-code",{"title":311,"icon":304,"path":312,"stem":313,"children":314,"page":30},"Integration API","\u002Fen\u002Fintegration-api","en\u002F07.integration-api",[315,318,322,327,332,337,341,346,350,354,359,364],{"title":245,"path":316,"stem":317,"icon":14},"\u002Fen\u002Fintegration-api\u002Foverview","en\u002F07.integration-api\u002F01.overview",{"title":319,"path":320,"stem":321,"icon":19},"Authentication","\u002Fen\u002Fintegration-api\u002Fauthentication","en\u002F07.integration-api\u002F02.authentication",{"title":323,"path":324,"stem":325,"icon":326},"Conventions","\u002Fen\u002Fintegration-api\u002Fconventions","en\u002F07.integration-api\u002F03.conventions","i-hugeicons-book-open-01",{"title":328,"path":329,"stem":330,"icon":331},"Pushing documents","\u002Fen\u002Fintegration-api\u002Fpushing-documents","en\u002F07.integration-api\u002F04.pushing-documents","i-hugeicons-upload-02",{"title":333,"path":334,"stem":335,"icon":336},"Consuming content","\u002Fen\u002Fintegration-api\u002Fconsuming-content","en\u002F07.integration-api\u002F05.consuming-content","i-hugeicons-download-02",{"title":338,"path":339,"stem":340,"icon":137},"Reference: documents","\u002Fen\u002Fintegration-api\u002Freference-documents","en\u002F07.integration-api\u002F06.reference-documents",{"title":342,"path":343,"stem":344,"icon":345},"Reference: categories, tags, markets","\u002Fen\u002Fintegration-api\u002Freference-categories-tags","en\u002F07.integration-api\u002F07.reference-categories-tags","i-hugeicons-folder-01",{"title":347,"path":348,"stem":349,"icon":211},"Reference: sync manifest","\u002Fen\u002Fintegration-api\u002Freference-sync","en\u002F07.integration-api\u002F08.reference-sync",{"title":351,"path":352,"stem":353,"icon":309},"OpenAPI","\u002Fen\u002Fintegration-api\u002Fopenapi","en\u002F07.integration-api\u002F09.openapi",{"title":355,"path":356,"stem":357,"icon":358},"Changelog","\u002Fen\u002Fintegration-api\u002Fchangelog","en\u002F07.integration-api\u002F10.changelog","i-hugeicons-time-schedule",{"title":360,"path":361,"stem":362,"icon":363},"Reference: groups, markets, access","\u002Fen\u002Fintegration-api\u002Freference-groups-access","en\u002F07.integration-api\u002F11.reference-groups-access","i-hugeicons-user-lock-01",{"title":365,"path":366,"stem":367,"icon":368},"Moving from CMWS","\u002Fen\u002Fintegration-api\u002Fcmws","en\u002F07.integration-api\u002F12.cmws","i-hugeicons-arrow-reload-horizontal",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":30},"What's new","i-hugeicons-gift","\u002Fen\u002Fwhats-new","en\u002F08.whats-new",[375],{"title":355,"path":376,"stem":377,"icon":358},"\u002Fen\u002Fwhats-new\u002Fchangelog","en\u002F08.whats-new\u002F01.changelog",{"title":379,"icon":299,"path":380,"stem":381,"children":382,"page":30},"Self-hosting","\u002Fen\u002Fself-hosting","en\u002F09.self-hosting",[383,386,390,395,399,404,408,413,418,422],{"title":245,"path":384,"stem":385,"icon":14},"\u002Fen\u002Fself-hosting\u002Foverview","en\u002F09.self-hosting\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":106},"Docker Compose","\u002Fen\u002Fself-hosting\u002Fdocker-compose","en\u002F09.self-hosting\u002F02.docker-compose",{"title":391,"path":392,"stem":393,"icon":394},"Kubernetes","\u002Fen\u002Fself-hosting\u002Fkubernetes","en\u002F09.self-hosting\u002F03.kubernetes","i-hugeicons-cloud",{"title":396,"path":397,"stem":398,"icon":101},"Configuration","\u002Fen\u002Fself-hosting\u002Fconfiguration","en\u002F09.self-hosting\u002F04.configuration",{"title":400,"path":401,"stem":402,"icon":403},"Licence","\u002Fen\u002Fself-hosting\u002Flicence","en\u002F09.self-hosting\u002F05.licence","i-hugeicons-license",{"title":405,"path":406,"stem":407,"icon":211},"Updates","\u002Fen\u002Fself-hosting\u002Fupdates","en\u002F09.self-hosting\u002F06.updates",{"title":409,"path":410,"stem":411,"icon":412},"Postgres","\u002Fen\u002Fself-hosting\u002Fpostgres","en\u002F09.self-hosting\u002F07.postgres","i-hugeicons-database",{"title":414,"path":415,"stem":416,"icon":417},"Backups","\u002Fen\u002Fself-hosting\u002Fbackups","en\u002F09.self-hosting\u002F08.backups","i-hugeicons-database-restore",{"title":419,"path":420,"stem":421,"icon":261},"Troubleshooting","\u002Fen\u002Fself-hosting\u002Ftroubleshooting","en\u002F09.self-hosting\u002F09.troubleshooting",{"title":423,"path":424,"stem":425,"icon":426},"Firewall","\u002Fen\u002Fself-hosting\u002Ffirewall","en\u002F09.self-hosting\u002F10.firewall","i-hugeicons-firewall",{"id":428,"title":409,"body":429,"description":1048,"extension":1049,"links":1050,"meta":1051,"navigation":1052,"path":410,"seo":1053,"stem":411,"__hash__":1054},"docs_en\u002Fen\u002F09.self-hosting\u002F07.postgres.md",{"type":430,"value":431,"toc":1040},"minimark",[432,446,451,457,541,545,548,555,560,749,753,971,975,982,1022,1036],[433,434,435,436,440,441,445],"p",{},"DDM runs with ",[437,438,439],"strong",{},"Postgres 18"," – exactly this major version, from our ",[442,443,444],"code",{},"postgres:18"," image. It brings the German dictionary DDM searches with. Only use another major version, a newer one too, once we offer it with an image and describe it here.",[447,448,450],"h2",{"id":449},"postgres-fixes","Postgres' fixes",[433,452,453,454,456],{},"Postgres 18's fixes (18.1, 18.2 …) come with every DDM version under the same tag, ",[442,455,444],{},". They need no conversion of the data – a restart with the new image is enough, and DDM is unavailable for a few seconds. Watchtower and Keel leave Postgres out; you fetch them by hand, best with every DDM update:",[458,459,464],"pre",{"className":460,"code":461,"language":462,"meta":463,"style":463},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Docker Compose\ndocker compose pull postgres\ndocker compose up -d postgres\n\n# Kubernetes – ddm.yaml pulls the image anew at every start\nkubectl -n ddm rollout restart statefulset\u002Fpostgres\n","bash","",[442,465,466,475,492,507,514,520],{"__ignoreMap":463},[467,468,471],"span",{"class":469,"line":470},"line",1,[467,472,474],{"class":473},"sHwdD","# Docker Compose\n",[467,476,478,482,486,489],{"class":469,"line":477},2,[467,479,481],{"class":480},"sBMFI","docker",[467,483,485],{"class":484},"sfazB"," compose",[467,487,488],{"class":484}," pull",[467,490,491],{"class":484}," postgres\n",[467,493,495,497,499,502,505],{"class":469,"line":494},3,[467,496,481],{"class":480},[467,498,485],{"class":484},[467,500,501],{"class":484}," up",[467,503,504],{"class":484}," -d",[467,506,491],{"class":484},[467,508,510],{"class":469,"line":509},4,[467,511,513],{"emptyLinePlaceholder":512},true,"\n",[467,515,517],{"class":469,"line":516},5,[467,518,519],{"class":473},"# Kubernetes – ddm.yaml pulls the image anew at every start\n",[467,521,523,526,529,532,535,538],{"class":469,"line":522},6,[467,524,525],{"class":480},"kubectl",[467,527,528],{"class":484}," -n",[467,530,531],{"class":484}," ddm",[467,533,534],{"class":484}," rollout",[467,536,537],{"class":484}," restart",[467,539,540],{"class":484}," statefulset\u002Fpostgres\n",[447,542,544],{"id":543},"moving-to-a-new-major-version","Moving to a new major version",[433,546,547],{},"A new major version (18 → 19) does not read the old one's data: it is backed up and restored into the new one. Only do this once we offer the new version – we tell you with the update. Plan for half an hour in which DDM is unavailable; longer for large databases.",[433,549,550,551,554],{},"The new version gets ",[437,552,553],{},"a volume of its own",". The old one stays untouched – if something goes wrong, you go back to the old version with it. Only once everything runs do you delete it.",[556,557,559],"h3",{"id":558},"with-docker-compose","With Docker Compose",[561,562,563,653,685],"ol",{},[564,565,566,569,570,573,574],"li",{},[437,567,568],{},"Stop the apps and back up the database"," – into a file next to ",[442,571,572],{},"compose.yaml",":",[458,575,577],{"className":460,"code":576,"language":462,"meta":463,"style":463},"cd \u002Fopt\u002Fddm\ndocker compose stop cms render-worker client\ndocker compose exec -T postgres pg_dump -U ddm -d ddm -Fc > ddm-18.dump\ndocker compose stop postgres\n",[442,578,579,588,606,643],{"__ignoreMap":463},[467,580,581,585],{"class":469,"line":470},[467,582,584],{"class":583},"s2Zo4","cd",[467,586,587],{"class":484}," \u002Fopt\u002Fddm\n",[467,589,590,592,594,597,600,603],{"class":469,"line":477},[467,591,481],{"class":480},[467,593,485],{"class":484},[467,595,596],{"class":484}," stop",[467,598,599],{"class":484}," cms",[467,601,602],{"class":484}," render-worker",[467,604,605],{"class":484}," client\n",[467,607,608,610,612,615,618,621,624,627,629,631,633,636,640],{"class":469,"line":494},[467,609,481],{"class":480},[467,611,485],{"class":484},[467,613,614],{"class":484}," exec",[467,616,617],{"class":484}," -T",[467,619,620],{"class":484}," postgres",[467,622,623],{"class":484}," pg_dump",[467,625,626],{"class":484}," -U",[467,628,531],{"class":484},[467,630,504],{"class":484},[467,632,531],{"class":484},[467,634,635],{"class":484}," -Fc",[467,637,639],{"class":638},"sMK4o"," >",[467,641,642],{"class":484}," ddm-18.dump\n",[467,644,645,647,649,651],{"class":469,"line":509},[467,646,481],{"class":480},[467,648,485],{"class":484},[467,650,596],{"class":484},[467,652,491],{"class":484},[564,654,655,660,661,664,665,668,669,672,673,676,677,680,681,684],{},[437,656,657,658,573],{},"Change three places in ",[442,659,572],{}," for the ",[442,662,663],{},"postgres"," service, the image to ",[442,666,667],{},"…\u002Fpostgres:19"," and the volume from ",[442,670,671],{},"postgres:\u002Fvar\u002Flib\u002Fpostgresql"," to ",[442,674,675],{},"postgres-19:\u002Fvar\u002Flib\u002Fpostgresql","; under ",[442,678,679],{},"volumes:"," at the end, add ",[442,682,683],{},"postgres-19:",".",[564,686,687,690],{},[437,688,689],{},"Start the new version and restore the backup:",[458,691,693],{"className":460,"code":692,"language":462,"meta":463,"style":463},"docker compose up -d postgres\ndocker compose exec -T postgres pg_restore -U ddm -d ddm --no-owner \u003C ddm-18.dump\ndocker compose up -d\n",[442,694,695,707,738],{"__ignoreMap":463},[467,696,697,699,701,703,705],{"class":469,"line":470},[467,698,481],{"class":480},[467,700,485],{"class":484},[467,702,501],{"class":484},[467,704,504],{"class":484},[467,706,491],{"class":484},[467,708,709,711,713,715,717,719,722,724,726,728,730,733,736],{"class":469,"line":477},[467,710,481],{"class":480},[467,712,485],{"class":484},[467,714,614],{"class":484},[467,716,617],{"class":484},[467,718,620],{"class":484},[467,720,721],{"class":484}," pg_restore",[467,723,626],{"class":484},[467,725,531],{"class":484},[467,727,504],{"class":484},[467,729,531],{"class":484},[467,731,732],{"class":484}," --no-owner",[467,734,735],{"class":638}," \u003C",[467,737,642],{"class":484},[467,739,740,742,744,746],{"class":469,"line":494},[467,741,481],{"class":480},[467,743,485],{"class":484},[467,745,501],{"class":484},[467,747,748],{"class":484}," -d\n",[556,750,752],{"id":751},"with-kubernetes","With Kubernetes",[561,754,755,821,848,907],{},[564,756,757,760],{},[437,758,759],{},"Stop the apps and back up the database:",[458,761,763],{"className":460,"code":762,"language":462,"meta":463,"style":463},"kubectl -n ddm scale deployment cms render-worker client --replicas=0\nkubectl -n ddm exec postgres-0 -- pg_dump -U ddm -d ddm -Fc > ddm-18.dump\n",[442,764,765,789],{"__ignoreMap":463},[467,766,767,769,771,773,776,779,781,783,786],{"class":469,"line":470},[467,768,525],{"class":480},[467,770,528],{"class":484},[467,772,531],{"class":484},[467,774,775],{"class":484}," scale",[467,777,778],{"class":484}," deployment",[467,780,599],{"class":484},[467,782,602],{"class":484},[467,784,785],{"class":484}," client",[467,787,788],{"class":484}," --replicas=0\n",[467,790,791,793,795,797,799,802,805,807,809,811,813,815,817,819],{"class":469,"line":477},[467,792,525],{"class":480},[467,794,528],{"class":484},[467,796,531],{"class":484},[467,798,614],{"class":484},[467,800,801],{"class":484}," postgres-0",[467,803,804],{"class":484}," --",[467,806,623],{"class":484},[467,808,626],{"class":484},[467,810,531],{"class":484},[467,812,504],{"class":484},[467,814,531],{"class":484},[467,816,635],{"class":484},[467,818,639],{"class":638},[467,820,642],{"class":484},[564,822,823,828,829,831,832,834,835,672,837,840,841,844,845,684],{},[437,824,657,825,573],{},[442,826,827],{},"ddm.yaml"," for the StatefulSet ",[442,830,663],{},", the image to ",[442,833,667],{},", and the volume's name from ",[442,836,663],{},[442,838,839],{},"postgres-19"," – under ",[442,842,843],{},"volumeMounts"," and under ",[442,846,847],{},"volumeClaimTemplates",[564,849,850,853,854],{},[437,851,852],{},"Create the StatefulSet anew."," Its volume is kept – Kubernetes does not delete it with it:",[458,855,857],{"className":460,"code":856,"language":462,"meta":463,"style":463},"kubectl -n ddm delete statefulset postgres\nkubectl -n ddm apply -f ddm.yaml\nkubectl -n ddm rollout status statefulset\u002Fpostgres\n",[442,858,859,875,892],{"__ignoreMap":463},[467,860,861,863,865,867,870,873],{"class":469,"line":470},[467,862,525],{"class":480},[467,864,528],{"class":484},[467,866,531],{"class":484},[467,868,869],{"class":484}," delete",[467,871,872],{"class":484}," statefulset",[467,874,491],{"class":484},[467,876,877,879,881,883,886,889],{"class":469,"line":477},[467,878,525],{"class":480},[467,880,528],{"class":484},[467,882,531],{"class":484},[467,884,885],{"class":484}," apply",[467,887,888],{"class":484}," -f",[467,890,891],{"class":484}," ddm.yaml\n",[467,893,894,896,898,900,902,905],{"class":469,"line":494},[467,895,525],{"class":480},[467,897,528],{"class":484},[467,899,531],{"class":484},[467,901,534],{"class":484},[467,903,904],{"class":484}," status",[467,906,540],{"class":484},[564,908,909,912],{},[437,910,911],{},"Restore the backup and start the apps:",[458,913,915],{"className":460,"code":914,"language":462,"meta":463,"style":463},"kubectl -n ddm exec -i postgres-0 -- pg_restore -U ddm -d ddm --no-owner \u003C ddm-18.dump\nkubectl -n ddm scale deployment cms render-worker client --replicas=1\n",[442,916,917,950],{"__ignoreMap":463},[467,918,919,921,923,925,927,930,932,934,936,938,940,942,944,946,948],{"class":469,"line":470},[467,920,525],{"class":480},[467,922,528],{"class":484},[467,924,531],{"class":484},[467,926,614],{"class":484},[467,928,929],{"class":484}," -i",[467,931,801],{"class":484},[467,933,804],{"class":484},[467,935,721],{"class":484},[467,937,626],{"class":484},[467,939,531],{"class":484},[467,941,504],{"class":484},[467,943,531],{"class":484},[467,945,732],{"class":484},[467,947,735],{"class":638},[467,949,642],{"class":484},[467,951,952,954,956,958,960,962,964,966,968],{"class":469,"line":477},[467,953,525],{"class":480},[467,955,528],{"class":484},[467,957,531],{"class":484},[467,959,775],{"class":484},[467,961,778],{"class":484},[467,963,599],{"class":484},[467,965,602],{"class":484},[467,967,785],{"class":484},[467,969,970],{"class":484}," --replicas=1\n",[556,972,974],{"id":973},"afterwards","Afterwards",[433,976,977,978,981],{},"Check in the CMS that your documents are there and the search finds them. Keep ",[442,979,980],{},"ddm-18.dump"," and the old volume for a few days, then delete it:",[458,983,985],{"className":460,"code":984,"language":462,"meta":463,"style":463},"docker volume rm ddm_postgres                    # Docker Compose\nkubectl -n ddm delete pvc postgres-postgres-0    # Kubernetes\n",[442,986,987,1003],{"__ignoreMap":463},[467,988,989,991,994,997,1000],{"class":469,"line":470},[467,990,481],{"class":480},[467,992,993],{"class":484}," volume",[467,995,996],{"class":484}," rm",[467,998,999],{"class":484}," ddm_postgres",[467,1001,1002],{"class":473},"                    # Docker Compose\n",[467,1004,1005,1007,1009,1011,1013,1016,1019],{"class":469,"line":477},[467,1006,525],{"class":480},[467,1008,528],{"class":484},[467,1010,531],{"class":484},[467,1012,869],{"class":484},[467,1014,1015],{"class":484}," pvc",[467,1017,1018],{"class":484}," postgres-postgres-0",[467,1020,1021],{"class":473},"    # Kubernetes\n",[433,1023,1024,1027,1028,1031,1032,1035],{},[437,1025,1026],{},"Back to the old version",", if needed: set the three places back and restart – with Kubernetes, as in step 3, with ",[442,1029,1030],{},"delete statefulset"," and ",[442,1033,1034],{},"apply",". The old volume has the data from before the move.",[1037,1038,1039],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":463,"searchDepth":477,"depth":477,"links":1041},[1042,1043],{"id":449,"depth":477,"text":450},{"id":543,"depth":477,"text":544,"children":1044},[1045,1046,1047],{"id":558,"depth":494,"text":559},{"id":751,"depth":494,"text":752},{"id":973,"depth":494,"text":974},"Which Postgres version DDM needs, how its fixes arrive, and how to move to a new major version.","md",null,{},{"icon":412},{"title":409,"description":1048},"qW7X4b4mgCRT6FkFY74AMdPgYXEIBqbdnJFTY4AwDls",[1056,1058],{"title":405,"path":406,"stem":407,"description":1057,"icon":211,"children":-1},"Bring an installation to a new version – by hand or automatically.",{"title":414,"path":415,"stem":416,"description":1059,"icon":417,"children":-1},"What DDM backs up itself, what else you should back up and how to restore a backup.",1793617723731]