Files
nexus/sreweekly/articles/497/08-upgrading-postgresql-with-no-data-loss-and-minimal-downtime.html
2026-09-12 17:23:01 +08:00

1709 lines
169 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<link href="https://palark.com/wp-content/themes/palark/assets/images/favicon.png" rel="shortcut icon"
type="image/x-icon"/>
<link href="https://palark.com/wp-content/themes/palark/assets/images/webclip.png" rel="apple-touch-icon"/>
<link rel="preconnect" href="https://palark.matomo.cloud">
<script async type="text/javascript" src="https://palark.com/wp-admin/admin-ajax.php?action=pll_xdata_check&#038;redirect=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F&#038;nonce=a8b1dc82b0"></script><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
<script type="application/ld+json">{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://palark.com#organization",
"name": "Palark",
"url": "https://palark.com",
"description": "Palark is a DevOps and SRE (Site Reliability Engineering) agency, created by passionate engineers and offering top-notch, all-in-one services worldwide. We specialise in Kubernetes-based infrastructure and Cloud Native technologies, and provide both a project-based approach and subscription packages, including 24/7 support and consulting services.",
"logo": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2023/07/palark-logo.svg",
"width": 1200,
"height": 216,
"caption": "Palark"
},
"image": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2023/07/palark-logo.svg",
"width": 1200,
"height": 216,
"caption": "Palark"
},
"sameAs": [
"https://www.linkedin.com/company/palark",
"https://github.com/palark",
"https://bsky.app/profile/palark.com",
"https://www.facebook.com/palarkcom/",
"https://www.youtube.com/@palark",
"https://clutch.co/profile/palark"
],
"award": "ISO/IEC 27001 certified",
"knowsAbout": [
"SRE as a Service",
"DevOps as a Service",
"DevOps emergency support",
"Kubernetes and cloud migration",
"Infrastructure & CI/CD audit",
"R&D and technology consulting",
"Private, self-hosted LLM",
"Kubernetes support",
"Solution for SaaS"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "info@palark.com",
"telephone": "+49 731 1461 3240",
"availableLanguage": [
"English",
"German"
],
"areaServed": [
"EU",
"US",
"Worldwide"
]
},
"foundingDate": "2022-05-04",
"address": {
"@type": "PostalAddress",
"streetAddress": "Hafenbad 33",
"addressLocality": "Ulm",
"addressCountry": "DE",
"addressRegion": "Baden-Württemberg",
"postalCode": "89073"
},
"legalName": "Palark GmbH",
"numberOfEmployees": {
"@type": "QuantitativeValue",
"minValue": 11,
"maxValue": 50
},
"vatID": "DE352602106"
},
{
"@type": "WebSite",
"@id": "https://palark.com#website",
"url": "https://palark.com",
"name": "Palark",
"description": "Palark | DevOps &amp; SRE",
"publisher": {
"@id": "https://palark.com#organization"
},
"inLanguage": "en-GB",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://palark.com/?s={search_term_string}"
},
"query-input": {
"@type": "PropertyValueSpecification",
"valueRequired": true,
"valueName": "search_term_string"
}
}
},
{
"@type": "WebPage",
"@id": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/",
"url": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/",
"name": "Upgrading PostgreSQL with no data loss and minimal downtime | Palark",
"description": "A technical story of upgrading a production PostgreSQL cluster from v13 to v16. It focuses on high availability and minimal downtime.",
"isPartOf": {
"@id": "https://palark.com#website"
},
"about": {
"@id": "https://palark.com#organization"
},
"inLanguage": "en-GB",
"datePublished": "2025-09-23T13:36:39+00:00",
"dateModified": "2025-12-23T09:35:11+00:00",
"image": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade.png",
"width": 1964,
"height": 1000
},
"thumbnailUrl": "https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade.png",
"breadcrumb": {
"@id": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/#breadcrumb"
},
"publisher": {
"@id": "https://palark.com#organization"
}
},
{
"@type": "BreadcrumbList",
"@id": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://palark.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://palark.com/blog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "databases",
"item": "https://palark.com/blog/tag/databases/"
},
{
"@type": "ListItem",
"position": 4,
"name": "Upgrading PostgreSQL with no data loss and minimal downtime",
"item": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/"
}
]
},
{
"@type": "TechArticle",
"@id": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/#techarticle",
"headline": "Upgrading PostgreSQL with no data loss and minimal downtime",
"description": "A technical story of upgrading a production PostgreSQL cluster from v13 to v16. It focuses on high availability and minimal downtime.",
"mainEntityOfPage": {
"@id": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/"
},
"url": "https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/",
"datePublished": "2025-09-23T13:36:39+00:00",
"dateModified": "2025-12-23T09:35:11+00:00",
"inLanguage": "en-GB",
"publisher": {
"@id": "https://palark.com#organization"
},
"image": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade.png",
"width": 1964,
"height": 1000
},
"thumbnailUrl": "https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade.png",
"wordCount": 3088,
"proficiencyLevel": "Expert",
"articleSection": [
"databases",
"PostgreSQL"
],
"keywords": [
"databases",
"PostgreSQL"
]
}
]
}</script>
<!-- This site is optimized with the Yoast SEO plugin v28.4 - https://yoast.com/product/yoast-seo-wordpress/ -->
<title>Upgrading PostgreSQL with no data loss and minimal downtime | Tech blog | Palark</title>
<meta name="description" content="A technical story of upgrading a production PostgreSQL cluster from v13 to v16. It focuses on high availability and minimal downtime." />
<link rel="canonical" href="https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/" />
<meta property="og:locale" content="en_GB" />
<meta property="og:type" content="article" />
<meta property="og:title" content="Upgrading PostgreSQL with no data loss and minimal downtime | Tech blog | Palark" />
<meta property="og:description" content="A technical story of upgrading a production PostgreSQL cluster from v13 to v16. It focuses on high availability and minimal downtime." />
<meta property="og:url" content="https://palark.com/blog/postgresql-upgrade-no-data-loss-downtime/" />
<meta property="og:site_name" content="Palark" />
<meta property="article:published_time" content="2025-09-23T13:36:39+00:00" />
<meta property="article:modified_time" content="2025-12-23T09:35:11+00:00" />
<meta property="og:image" content="https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade.png" />
<meta property="og:image:width" content="1964" />
<meta property="og:image:height" content="1000" />
<meta property="og:image:type" content="image/png" />
<meta name="author" content="Timur Nizamutdinov" />
<meta name="twitter:card" content="summary_large_image" />
<!-- / Yoast SEO plugin. -->
<link rel='dns-prefetch' href='//www.googletagmanager.com' />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://palark.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://palark.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F&#038;format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<link id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=7.1' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=7.1' media='all' />
</noscript><style id="co-authors-plus-coauthors-style-inline-css">
.wp-block-co-authors-plus-coauthors.is-layout-flow [class*=wp-block-co-authors-plus]{display:inline}
/*# sourceURL=https://palark.com/wp-content/plugins/co-authors-plus/build/blocks/block-coauthors/style-index.css */
</style>
<style id="co-authors-plus-avatar-style-inline-css">
.wp-block-co-authors-plus-avatar :where(img){height:auto;max-width:100%;vertical-align:bottom}.wp-block-co-authors-plus-coauthors.is-layout-flow .wp-block-co-authors-plus-avatar :where(img){vertical-align:middle}.wp-block-co-authors-plus-avatar:is(.alignleft,.alignright){display:table}.wp-block-co-authors-plus-avatar.aligncenter{display:table;margin-inline:auto}
/*# sourceURL=https://palark.com/wp-content/plugins/co-authors-plus/build/blocks/block-coauthor-avatar/style-index.css */
</style>
<style id="co-authors-plus-image-style-inline-css">
.wp-block-co-authors-plus-image{margin-bottom:0}.wp-block-co-authors-plus-image :where(img){height:auto;max-width:100%;vertical-align:bottom}.wp-block-co-authors-plus-coauthors.is-layout-flow .wp-block-co-authors-plus-image :where(img){vertical-align:middle}.wp-block-co-authors-plus-image:is(.alignfull,.alignwide) :where(img){width:100%}.wp-block-co-authors-plus-image:is(.alignleft,.alignright){display:table}.wp-block-co-authors-plus-image.aligncenter{display:table;margin-inline:auto}
/*# sourceURL=https://palark.com/wp-content/plugins/co-authors-plus/build/blocks/block-coauthor-image/style-index.css */
</style>
<style id="safe-svg-svg-icon-style-inline-css">
.wp-block-safe-svg-svg-icon a{align-self:center}.safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{fill:currentColor;height:100%;max-height:100%;max-width:100%;width:100%}
/*# sourceURL=https://palark.com/wp-content/plugins/safe-svg/dist/safe-svg-block-frontend.css */
</style>
<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--purple: #9540ff;--wp--preset--color--lime: #00ddba;--wp--preset--color--blue: #00a1fC;--wp--preset--color--dark: #231f20;--wp--preset--color--gray: #bcbcbc;--wp--preset--color--light-gray: #f6f6f6;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-purple-color{color: var(--wp--preset--color--purple) !important;}.has-lime-color{color: var(--wp--preset--color--lime) !important;}.has-blue-color{color: var(--wp--preset--color--blue) !important;}.has-dark-color{color: var(--wp--preset--color--dark) !important;}.has-gray-color{color: var(--wp--preset--color--gray) !important;}.has-light-gray-color{color: var(--wp--preset--color--light-gray) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-purple-background-color{background-color: var(--wp--preset--color--purple) !important;}.has-lime-background-color{background-color: var(--wp--preset--color--lime) !important;}.has-blue-background-color{background-color: var(--wp--preset--color--blue) !important;}.has-dark-background-color{background-color: var(--wp--preset--color--dark) !important;}.has-gray-background-color{background-color: var(--wp--preset--color--gray) !important;}.has-light-gray-background-color{background-color: var(--wp--preset--color--light-gray) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-purple-border-color{border-color: var(--wp--preset--color--purple) !important;}.has-lime-border-color{border-color: var(--wp--preset--color--lime) !important;}.has-blue-border-color{border-color: var(--wp--preset--color--blue) !important;}.has-dark-border-color{border-color: var(--wp--preset--color--dark) !important;}.has-gray-border-color{border-color: var(--wp--preset--color--gray) !important;}.has-light-gray-border-color{border-color: var(--wp--preset--color--light-gray) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:root :where(.wp-block-icon svg){width: 24px;}
:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}
:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
/*# sourceURL=global-styles-inline-css */
</style>
<link id='cf7apps-honeypot-frontend-css' href='/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/css/honeypot-frontend.css?ver=3.7.1' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='cf7apps-honeypot-frontend-css' href='/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/css/honeypot-frontend.css?ver=3.7.1' media='all' />
</noscript><link id='scriptlesssocialsharing-css' href='/wp-content/plugins/scriptless-social-sharing/includes/css/scriptlesssocialsharing-style.css?ver=3.3.1' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='scriptlesssocialsharing-css' href='/wp-content/plugins/scriptless-social-sharing/includes/css/scriptlesssocialsharing-style.css?ver=3.3.1' media='all' />
</noscript><style id="scriptlesssocialsharing-inline-css">
.scriptlesssocialsharing__buttons a.button { padding: 12px; flex: 1; }@media only screen and (max-width: 767px) { .scriptlesssocialsharing .sss-name { position: absolute; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; border: 0; overflow: hidden; } }
/*# sourceURL=scriptlesssocialsharing-inline-css */
</style>
<link id='lazyload-video-css-css' href='/wp-content/plugins/lazy-load-for-videos/public/css/lazyload-shared.css?ver=2.18.11' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='lazyload-video-css-css' href='/wp-content/plugins/lazy-load-for-videos/public/css/lazyload-shared.css?ver=2.18.11' media='all' />
</noscript><style id="lazyload-video-css-inline-css">
.entry-content a.lazy-load-youtube, a.lazy-load-youtube, .lazy-load-vimeo{ background-size: cover; }.titletext.youtube { display: none; }.lazy-load-div:before { content: "\25B6"; text-shadow: 0px 0px 60px rgba(0,0,0,0.8); }
/*# sourceURL=lazyload-video-css-inline-css */
</style>
<script id="theme-app-js-extra">
var backend_data = {"ajax_url":"https://palark.com/wp-admin/admin-ajax.php","current_lang":"en","second_lang":"de"};
var popup_messages = {"language_helper":{"title":"Deutsch?","text":"In&nbsp;deinen Spracheinstellungen ist Deutsch als Standardsprache eingestellt. Du kannst jetzt zur deutschen Version wechseln.","button":"Zu palark.de wechseln"}};
var palark_cf7 = {"phone_invalid":"Please enter a\u00a0valid phone number for\u00a0the\u00a0selected country.","server_error":"Something went wrong while sending your message. Please try again later."};
//# sourceURL=theme-app-js-extra
</script>
<script id="theme-app-js" defer src="/wp-content/themes/palark/assets/js/app.min.js?ver=1.6.41"></script>
<script id="theme-language-helper-js" defer src="/wp-content/themes/palark/assets/js/language-helper.min.js?ver=1.6.41"></script>
<script id="theme-cookie-banner-js" defer src="/wp-content/themes/palark/assets/js/cookie-banner.min.js?ver=1.6.41"></script>
<script id="theme-nice-select-js" defer src="/wp-content/themes/palark/assets/js/nice-select.min.js?ver=1.6.41"></script>
<script id="theme-highlight-js" defer src="/wp-content/themes/palark/assets/js/highlight.min.js?ver=1.6.41"></script>
<script id="theme-comment-js" defer src="/wp-content/themes/palark/assets/js/comment.min.js?ver=1.6.41"></script>
<script id="theme-tooltips-js" defer src="/wp-content/themes/palark/assets/js/tooltips.min.js?ver=1.6.41"></script>
<script id="theme-blog-post-toc-js" defer src="/wp-content/themes/palark/assets/js/blog-post-toc.min.js?ver=1.6.41"></script>
<script id="theme-clipboard-js" defer src="/wp-content/themes/palark/assets/js/clipboard.min.js?ver=1.6.41"></script>
<!-- Google tag (gtag.js) snippet added by Site Kit -->
<!-- Google Analytics snippet added by Site Kit -->
<script id="google_gtagjs-js" defer src="https://www.googletagmanager.com/gtag/js?id=GT-PBZC4FK" async></script>
<script id="google_gtagjs-js-after">
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}
gtag("set","linker",{"domains":["palark.com"]});
gtag("js", new Date());
gtag("set", "developer_id.dZTNiMT", true);
gtag("config", "GT-PBZC4FK");
window._googlesitekit = window._googlesitekit || {}; window._googlesitekit.throttledEvents = []; window._googlesitekit.gtagEvent = (name, data) => { var key = JSON.stringify( { name, data } ); if ( !! window._googlesitekit.throttledEvents[ key ] ) { return; } window._googlesitekit.throttledEvents[ key ] = true; setTimeout( () => { delete window._googlesitekit.throttledEvents[ key ]; }, 5 ); gtag( "event", name, { ...data, event_source: "site-kit" } ); };
//# sourceURL=google_gtagjs-js-after
</script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://palark.com/xmlrpc.php?rsd" />
<meta name="generator" content="Site Kit by Google 1.186.0" />
<!-- OneAll.com / Social Login for WordPress / v5.10.0 -->
<script data-cfasync="false" type="text/javascript">
(function() {
var oa = document.createElement('script'); oa.type = 'text/javascript';
oa.async = true; oa.src = 'https://palark.api.oneall.com/socialize/library.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(oa, s);
})();
</script>
<style>.oneall_social_login + p.comment-notes{margin-top: 10px !important;}#login #loginform .oneall_social_login{background-color: rgba(0, 0, 0, 0.04);padding: 10px 10px 0 10px;margin-bottom: 10px;border: 1px solid rgba(0, 0, 0, 0.06);border-radius: 4px;}</style><link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/fonts.css?ver=1.6.41" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/fonts/fonts.css?ver=1.6.41"></noscript>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/css/roboto-fonts.min.css?ver=1.6.41" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/css/roboto-fonts.min.css?ver=1.6.41"></noscript>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/StyreneA/Bold.woff" as="font" type="font/woff" crossorigin>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/StyreneA/Medium.woff" as="font" type="font/woff" crossorigin>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/StyreneA/Regular.woff" as="font" type="font/woff" crossorigin>
<style>@media screen and (max-width:767px){:root{--wp--preset--font-size--medium:1.125rem}}html{height:100%;scroll-behavior:smooth;scroll-padding-top:110px}@media screen and (max-width:991px){html{scroll-padding-top:60px}}html ::selection{background:#9540ff;color:#fff}body{--wp--style--global--content-size:1504px;background-color:#fff;color:#231f20;font-family:Styrene A,Arial,sans-serif;font-size:14px;line-height:1.2;margin:0;min-height:100%;overflow-x:hidden}@media screen and (min-width:480px){body{font-size:16px}}main{margin-top:-4rem;position:relative}@media screen and (min-width:768px){main{margin-top:-100px}}a{color:#231f20;transition:color .2s}a:hover{text-decoration:none}p{line-height:1.6;margin:0 0 1em}p:first-child{margin-top:0}p:last-child{margin-bottom:0}ul{line-height:1.6;margin:0 0 1rem;padding-left:2.5rem}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.2;margin:0 0 10px}.h1,.h1 .bold,.h2 .bold,.h3 .bold,.h4 .bold,.h5 .bold,.h6 .bold,h1,h1 .bold,h2 .bold,h3 .bold,h4 .bold,h5 .bold,h6 .bold{text-transform:uppercase}.h1,h1{font-size:1.75rem;margin-bottom:1rem;margin-top:0}@media screen and (min-width:480px){.h1,h1{font-size:2.2rem}}@media screen and (min-width:768px){.h1,h1{font-size:2.5rem}}@media screen and (min-width:992px){.h1,h1{font-size:3rem}}.h1.margin-medium{margin-right:2rem}@media screen and (min-width:1440px){.h1.pricing-heading-chlim{max-width:35%}}@media screen and (max-width:479px){.h1.mob-xl{font-size:2.4rem}}.h1.x-large{font-size:3.6rem}@media screen and (min-width:480px){.h1.x-large{font-size:5rem}}.h1.xx-large{font-size:2.9rem}@media screen and (min-width:480px){.h1.xx-large{font-size:6rem}}.h1.absolute-center{bottom:auto;left:auto;margin:auto;position:absolute;right:auto;top:auto}.h1.home-hero-chlim{max-width:20ch}.h2,h2{font-size:1.5rem;margin-bottom:1.2rem;text-transform:uppercase}@media screen and (min-width:480px){.h2,h2{font-size:2rem}}@media screen and (min-width:768px){.h2,h2{font-size:2.5em}}@media screen and (min-width:1280px){.h2,h2{font-size:2.8rem}}.h2 img,h2 img{vertical-align:bottom}.h2.chlim---what-we-do{max-width:11ch}@media screen and (min-width:992px){.h2.chlim---what-we-do{max-width:9ch}}.h2.chlim-service-hero{max-width:20ch}.h2.snake-case{text-transform:capitalize}.h2.bold{margin-bottom:2rem}.h2.margin-top-a{margin-top:auto}.h2.margin-bottom-none{margin-bottom:0}.h2.margin-bottom-none.services{font-size:1.3rem}@media screen and (min-width:480px){.h2.margin-bottom-none.services{font-size:1.4rem}}@media screen and (min-width:768px){.h2.margin-bottom-none.services{font-size:2rem}}.h2.text-white{color:#fff}.h2.align-left{margin-right:auto}.h2.subscribe-heading{margin-bottom:1.8rem}.h2.medium{margin-bottom:0;text-decoration:none}.h2.accent span{color:#9540ff}.h3,h3{font-size:1.5em;margin-bottom:1rem}@media screen and (min-width:768px){.h3,h3{font-size:1.75rem}}@media screen and (min-width:992px){.h3,h3{font-size:2rem}}.h3.margin-bottom-s{margin-bottom:2.5rem}.h3.margin-b-m{margin-bottom:2rem}@media screen and (min-width:1280px){.h3.bold{color:#000}}.h4,h4{font-size:1.25rem;letter-spacing:-.02em;margin-bottom:0;margin-top:0}@media screen and (min-width:768px){.h4,h4{font-size:1.5rem}}.h4.medium{text-decoration:underline}.h4.medium,.h4.normal{font-weight:500}.h4.team-member-name{margin-bottom:1rem;margin-right:auto}@media screen and (min-width:1440px){.h4.team-member-name{margin-bottom:.125rem}}.h4.no-margin{margin-bottom:0}.h4.blogs{font-size:1.3rem;font-weight:700;min-height:6.1rem}@media screen and (min-width:1280px){.h4.blogs{font-size:1.4rem}}@media screen and (max-width:767px){.h4.blogs{font-size:1.5rem;line-height:148%;min-height:3rem}}.h5,h5{font-size:1.2rem;margin-bottom:1rem;margin-top:0}.h5.grey{color:#575863}.h6,h6{font-size:.75rem;margin-bottom:1rem;margin-top:10px}.bold{font-weight:700}.upper{text-transform:uppercase}.t-red{color:#f14040}.t-center{text-align:center}.accent-p,.span-purple{color:#9540ff;text-align:left}img{height:auto;max-width:100%;object-fit:contain}.link{color:#231f20;font-weight:700;text-decoration:none}.link--arrow{align-items:center;display:inline-flex;font-size:1.25rem;gap:.25rem;line-height:1.6;position:relative}.link--arrow img{filter:invert(1) brightness(0) contrast(70%);height:.875rem;position:relative;top:.125rem;transform:translateX(0);transition:transform .3s ease;width:.875rem}.link--arrow:hover img{transform:translateX(25%)}.num-list{counter-reset:num;line-height:1.6;list-style-type:none;margin:30px 0 0 45px;padding:15px 0 5px}@media screen and (min-width:992px){.num-list{font-size:20px;margin:30px 0 30px 45px}}.num-list li{padding:0 0 36px 54px;position:relative}@media screen and (min-width:992px){.num-list li{padding:0 0 0 84px}}.num-list li:last-child{padding-bottom:0}.num-list li:before{align-items:center;border:3px solid #231f20;border-radius:50%;color:#231f20;content:counters(num,".",decimal-leading-zero);counter-increment:num;display:flex;font-size:16px;font-weight:700;height:36px;justify-content:center;left:0;position:absolute;top:0;width:36px}@media screen and (min-width:992px){.num-list li:before{border-width:4px;font-size:20px;height:40px;top:4px;width:40px}}.wide-list{display:flex;flex-direction:column}.wide-list li{box-sizing:content-box}@media screen and (min-width:992px){.wide-list li{max-width:373px}.wide-list li:nth-child(2n){margin-left:auto}}.overflow-hidden{overflow:hidden}section{margin-bottom:2em;margin-top:2em}section:first-child{margin-top:0}section:last-child{margin-bottom:0}@media screen and (min-width:768px){section{margin-bottom:3em;margin-top:3em}}@media screen and (min-width:1280px){section{margin-bottom:5em;margin-top:5em}}section.has-background{padding-bottom:2em;padding-top:2em}@media screen and (min-width:768px){section.has-background{padding-bottom:3em;padding-top:3em}}@media screen and (min-width:1280px){section.has-background{padding-bottom:5em;padding-top:5em}}.hero-spacer-top{background-color:#f4f3f4;height:4.8rem}@media screen and (min-width:480px){.hero-spacer-top{height:5.5rem}}@media screen and (min-width:768px){.hero-spacer-top{height:5.4rem}}@media screen and (min-width:992px){.hero-spacer-top{height:14rem}}@media screen and (min-width:768px){.hero-spacer-top_small{height:7rem}}.g-t-10{grid-template-columns:10% auto!important}@media screen and (min-width:768px){.g-t-10{font-size:1.25rem}}.a-i-right{align-items:flex-end!important}.a-i-right .wp-block-group{width:100%}.m-b-40{margin-bottom:1.5rem}@media screen and (min-width:992px){.m-b-40{margin-bottom:2.5rem}}.m-0-auto{margin:0 auto}.p-l-0{padding-left:0!important}.container{box-sizing:border-box;margin:0 auto;max-width:100%;padding-left:20px;padding-right:20px;width:100%}@media screen and (min-width:480px){.container{padding-left:32px;padding-right:32px}}@media screen and (min-width:1440px){.container{max-width:var(--wp--style--global--content-size)}}.container--bordered{border-bottom:1px solid #231f20}.content{align-items:flex-start;display:flex;flex-direction:column;height:100%;justify-content:center;max-width:1180px;min-height:4rem;width:90%}@media screen and (min-width:1280px){.content{max-width:1340px;width:92%}}@media screen and (min-width:1440px){.content{max-width:1440px}}.content.large,.content.relative{position:relative;z-index:2}.content.large{max-width:none;width:100%}@media screen and (min-width:1280px){.content.large{width:100%}}.content.large.center{align-items:center}@media screen and (max-width:991px){.content.large.tablet-reversed{flex-direction:column-reverse}}.content.left-align{align-items:flex-start;width:90%}.content.display-flex{flex-direction:row}@media screen and (max-width:767px){.content.display-flex{align-items:center;flex-direction:column}}.content.overflow{display:none;width:100%}@media screen and (max-width:991px){.content.overflow{display:flex}}.content.align-left{align-items:flex-start}.content.reduced{width:84%}@media screen and (min-width:1280px){.content.reduced{max-width:979px}}@media screen and (min-width:1440px){.content.reduced{max-width:1160px}}.content.small-inner{align-items:center;bottom:0;flex-direction:row;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:1440px){.content.small-inner{align-items:center;flex-direction:row;margin-left:auto;margin-right:auto;position:absolute;z-index:10}}@media screen and (max-width:991px){.content.small-inner{flex-direction:column}}.content.small-hero-inner{align-items:flex-end;bottom:auto;flex-direction:row;height:45%;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:1440px){.content.small-hero-inner{align-items:center;flex-direction:row;height:39.6%;margin-left:auto;margin-right:auto;position:absolute;z-index:-1}}@media screen and (max-width:991px){.content.small-hero-inner{flex-direction:column;height:55%}}@media screen and (max-width:767px){.content.small-hero-inner{display:none}}.content.inner-cards{align-items:center;bottom:0;flex-direction:row;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:2}@media screen and (min-width:1440px){.content.inner-cards{align-items:center;flex-direction:row;margin-left:auto;margin-right:auto;position:absolute;z-index:10}}@media screen and (max-width:991px){.content.inner-cards{flex-direction:column}}@media screen and (max-width:767px){.content.inner-cards{flex-direction:column}}.content.center{align-items:flex-start}@media screen and (min-width:1440px){.content.center{align-items:flex-start}}.content.hero-content-handler{align-items:center;bottom:0;flex-direction:row;justify-content:flex-start;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:1440px){.content.hero-content-handler{align-items:center;flex-direction:row;margin-left:auto;margin-right:auto;position:absolute;z-index:10}}@media screen and (max-width:991px){.content.hero-content-handler{flex-direction:column;margin-top:3rem;position:relative;z-index:2}}.content-grid{grid-column-gap:0;grid-row-gap:0;align-items:center;grid-template-columns:minmax(30px,1fr) minmax(auto,500px) minmax(auto,700px) minmax(30px,1fr);grid-template-rows:auto}@media screen and (max-width:767px){.content-grid{grid-template-columns:1fr}}.nb{background-color:#00a1fc;color:#fff;position:sticky;top:0;z-index:92}.nb .container{align-items:center;display:flex;gap:16px;justify-content:space-between}.nb__spacer{display:none}@media screen and (min-width:992px){.nb__spacer{display:block}}.nb__content{font-size:14px;line-height:1.35}@media screen and (min-width:992px){.nb__content{font-size:16px}}.nb__content p{margin:0;padding:.5em 0}.nb__content p a{color:#fff;text-decoration:underline}.nb__content p a:hover{text-decoration:none}.nb__close{cursor:pointer;font-size:25px}.nb__close:hover{color:#fff}.header{box-shadow:0 0 10px transparent;display:flex;justify-content:center;left:0;position:sticky;top:0;transition:all .15s ease-in-out;z-index:150}@media screen and (min-width:601px){body.admin-bar .header{top:46px}}@media screen and (min-width:782px){body.admin-bar .header{top:32px}}body.header-menu-opened .header{background:#fff}@media screen and (max-width:991px){body.header-menu-opened .header{position:fixed;right:0;top:0!important;width:100%}}.header_float{background:#fff}.header__logo{height:28px}@media screen and (min-width:1280px){.header__logo{height:40px}}.header__logo>*{height:100%;width:auto}.header__content{align-items:center;display:flex;justify-content:space-between;width:100%}@media screen and (min-width:768px){.header__content{height:100px}}@media screen and (min-width:992px){.header__controls{align-items:center;display:flex;flex:1;position:relative}}@media screen and (max-width:991px){.header__controls{display:contents}}.header__right{align-items:center;display:flex;gap:2.5rem;margin-left:2em}@media screen and (min-width:1440px){.header__right{gap:3.125rem}}@media screen and (max-width:991px){.header__right{display:contents}}.header__title{align-items:center;display:flex;flex-direction:row}.header__title img{max-height:22px}@media screen and (min-width:768px){.header__title img{max-height:26px}}@media screen and (min-width:992px){.header__title img{max-height:none}}.header__hamburger{cursor:pointer;display:inline-block;flex-shrink:0;height:1rem;position:relative;transition:.3s;width:1.5rem}@media screen and (min-width:992px){.header__hamburger{display:none}}.header__hamburger span{background:#141f2e;border-radius:8px;display:block;height:.125rem;position:absolute;transition:.5s cubic-bezier(.8,.5,.2,1.4);width:100%}.header__hamburger span:first-child{left:0;top:0}.header__hamburger span:nth-child(2){left:0;top:50%;transform:translateY(-50%)}.header__hamburger span:nth-child(3){bottom:0;left:0}body.header-menu-opened .header__hamburger{transition:.2s cubic-bezier(.8,.5,.2,1.4)}body.header-menu-opened .header__hamburger span:first-child{transform:rotate(-45deg) translate(-4px,6px)}body.header-menu-opened .header__hamburger span:nth-child(2){opacity:0;transform:translate(100%,-50%)}body.header-menu-opened .header__hamburger span:nth-child(3){transform:rotate(45deg) translate(-4px,-6px)}@media screen and (min-width:992px){.header .nav{align-items:center;display:flex;font-size:.85rem;gap:1rem;justify-content:space-between;list-style:none;margin:0;padding:0}}@media screen and (min-width:1280px){.header .nav{font-size:1rem;gap:2rem}}@media screen and (min-width:992px){.header .nav .sub-menu{background-color:#f3f3f3;border:1px solid #7e7e7e;border-radius:1px;display:flex;flex-direction:column;gap:1rem 1.875rem;list-style:none;margin:0;min-width:240px;padding:1.5rem}.header .nav .sub-menu-container{left:-2em;opacity:0;padding-top:1.5rem;position:absolute;transform:scale(.75) translateY(19px);transform-origin:50% 0;transition:all .2s cubic-bezier(.5,0,0,1.25),opacity .15s ease-out;visibility:hidden;z-index:100}.header .nav .sub-menu-container--grouped{left:auto;max-width:calc(100vw - 2.5rem);min-width:52.0625rem;right:0;width:max-content}.header .nav .sub-menu a{color:#231f20;text-decoration:none;white-space:nowrap}.header .nav .sub-menu a:hover{color:#9540ff}.header .nav .sub-menu:not(.grouped-menu,.two-columns){width:max-content}.header .nav .sub-menu.two-columns{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);width:100%}.header .nav .sub-menu.grouped-menu{column-gap:1.875rem;display:grid;grid-template-columns:minmax(max-content,1fr) minmax(max-content,1fr);row-gap:2rem;width:100%}.header .nav .sub-menu.grouped-menu .menu-group{display:block;padding-right:0}.header .nav .sub-menu.grouped-menu .menu-group:nth-child(2){grid-column:2;grid-row:1/span 2}.header .nav .sub-menu.grouped-menu .menu-group:nth-child(3){grid-column:1;grid-row:2}.header .nav .sub-menu.grouped-menu .menu-group__title{display:block;font-size:.875rem;font-weight:700;line-height:1.1875rem;text-transform:uppercase;white-space:nowrap}}@media screen and (min-width:992px)and (min-width:1280px){.header .nav .sub-menu.grouped-menu .menu-group__title{font-size:1rem}}@media screen and (min-width:992px){.header .nav .sub-menu.grouped-menu .menu-group__items{align-items:flex-start;display:flex;flex-direction:column;gap:1.25rem;list-style:none;margin:1.25rem 0 0;padding:0}.header .nav .sub-menu.grouped-menu>.menu-item__last{grid-column:1/-1}.header .nav .sub-menu .menu-item__icon{display:inline-block;height:1.125rem;margin-right:.25rem;object-fit:contain;vertical-align:middle;width:1.125rem}.header .nav .sub-menu .menu-item__last{border-top:1px solid #7e7e7e;grid-column:1/-1;padding-top:1rem}}.header .nav a{color:#231f20;font-size:1rem;text-decoration:none;white-space:nowrap}.header .nav a:hover{color:#9540ff}@media screen and (min-width:768px){.header .nav a{font-size:1.125rem}}@media screen and (min-width:992px){.header .nav a{font-size:.85rem}}@media screen and (min-width:1280px){.header .nav a{font-size:1rem}}.header .nav a[target=_blank]{align-items:center;display:inline-flex}.header .nav a[target=_blank]:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 1024 1024'%3E%3Cpath d='M960 704c-35.346 0-64 28.654-64 64v64c0 35.346-28.654 64-64 64H192c-35.346 0-64-28.654-64-64V192c0-35.346 28.654-64 64-64h64c35.346 0 64-28.654 64-64S291.346 0 256 0h-64C85.961 0 0 85.961 0 192v640c0 106.039 85.961 192 192 192h640c106.039 0 192-85.961 192-192v-64c0-35.346-28.654-64-64-64z'/%3E%3Cpath d='M1023.876 51.52c0-1.92 0-3.84-1.6-5.44a63.957 63.957 0 0 0-1.92-6.4 63.973 63.973 0 0 0-3.2-6.4s0-3.2-2.56-4.8a63.989 63.989 0 0 0-17.6-17.6L991.876 8l-6.08-3.2-6.72-1.92h-5.44A64.028 64.028 0 0 0 959.876 0h-384c-35.346 0-64 28.654-64 64s28.654 64 64 64h229.44l-370.56 370.88c-25.007 25.007-25.007 65.553 0 90.56s65.553 25.007 90.56 0l370.56-370.88V448c0 35.346 28.654 64 64 64s64-28.654 64-64V64c.407-4.15.407-8.33 0-12.48z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:contain;content:"";display:inline-block;height:.875rem;margin-left:.375rem;width:.875rem}@media screen and (max-width:991px){.header .nav .current-menu-item a,.header .nav .current_page_parent a{color:#818181!important}}@media screen and (min-width:992px){.header .nav>.current-menu-item:not(:has(>.sub-menu-container))>a,.header .nav>.current_page_parent:not(:has(>.sub-menu-container))>a{color:#818181!important}.header .nav .sub-menu .current-menu-item>a{color:#818181!important}}.header .button.pc-only-button{font-size:1rem;min-height:3rem;min-width:10rem;padding:.5rem 1.5rem}@media screen and (max-width:991px){.header .button.pc-only-button{display:none}}@media screen and (min-width:992px){.header .menu-item-has-children{display:inline-block;padding-right:1.625rem;position:relative}.header .menu-item-has-children.menu-item--grouped-submenu{position:static}.header .menu-item-has-children:hover .sub-menu-container{opacity:1;transform:scale(1);visibility:visible}.header .menu-item-has-children:hover>a{color:#9540ff}.header .menu-item-has-children:hover>a:after{border-color:#9540ff;transform:rotate(-135deg)}.header .menu-item-has-children>a{cursor:pointer;display:inline-block;position:relative}.header .menu-item-has-children>a:after{border-bottom:1.5px solid #000;border-right:1.5px solid #000;content:"";display:block;height:5px;margin-top:-3px;pointer-events:none;position:absolute;right:-.875rem;top:50%;transform:rotate(45deg);transform-origin:66% 66%;transition:all .15s ease-in-out;width:5px}}@media screen and (min-width:992px)and (min-width:1280px){.header .menu-item-has-children>a:after{border-width:2px}}.header .language-links{display:flex;font-size:14px;gap:1em;margin:0 auto 0 1.25em}@media screen and (min-width:480px){.header .language-links{margin:0 auto 0 3em}}@media screen and (min-width:1280px){.header .language-links{font-size:16px}}.header .language-links a{color:#231f20;text-decoration:none}.header .language-links a:hover{color:#9540ff}.header .language-links a.active{color:#9540ff;position:relative}@media screen and (min-width:768px){.header .language-links a.active{font-weight:600}}.header .language-links a.active:after{background-color:#9540ff;bottom:-.2em;content:"";height:2px;left:0;position:absolute;width:100%}@media screen and (min-width:768px){.header .language-links a.active:after{bottom:-.45em;height:3px}}html:has(body.header-menu-opened){overflow:hidden;overscroll-behavior:none}body.header-menu-opened{overflow:hidden;overscroll-behavior:none;transition:.2s}body.header-menu-opened:after{background-color:rgba(0,0,0,.5);content:"";height:100%;position:fixed;width:100%;z-index:55}.header__menu{background:#fff;bottom:0;box-sizing:border-box;display:block;height:100dvh;overflow:auto;overscroll-behavior:contain;position:fixed;right:-100vw;top:0;transition:.2s;width:100vw;z-index:-1}@media screen and (min-width:992px){.header__menu{display:contents}.header__menu .sidebar__buttons{display:none}.header__menu>div.container{display:contents}.header__menu>div.container>a{display:none}}body.header-menu-opened .header__menu{left:0;z-index:60}.header__menu .container{align-items:flex-start;display:flex;flex-direction:column;padding-bottom:5rem;padding-top:1.375rem}@media screen and (max-width:991px){.header__menu .container{padding:.625rem 1.25rem 1.5rem}.header__menu .container>a{display:none}.header__menu .container .sidebar__buttons{margin:0 0 2.125rem}.header__menu .container .sidebar__buttons .button{border-radius:1rem;font-size:1rem;height:3rem;line-height:1.6;margin:0;padding:0 1.5rem;white-space:nowrap;width:10rem}}.header__menu .container>a{font-size:1rem;margin:1rem 0;text-decoration:none}@media screen and (min-width:768px){.header__menu .container>a{font-size:1.125rem}}.header__menu .container>a:hover{color:#9540ff}.header__menu .container>a.button--dark{margin:2rem auto}@media screen and (min-width:480px){.header__menu .container>a.button--dark{margin:2.5rem auto 2rem}}.header__menu ul{align-items:flex-start;display:flex;flex-direction:column;gap:1rem;list-style:none;margin:0;padding:0}@media screen and (min-width:768px){.header__menu ul{font-size:1rem}}@media screen and (min-width:992px){.header__menu ul{flex-direction:row}}@media screen and (max-width:991px){.header__menu .sidebar__nav{gap:.5rem;width:100%}.header__menu li{align-items:flex-start;display:flex;flex-direction:column;width:100%}.header__menu .menu-item-has-children>a{align-items:center;box-sizing:border-box;color:#231f20;cursor:text;display:flex;min-height:3rem;padding:.875rem 3rem .875rem 1rem;position:relative;user-select:none;width:100%}.header__menu .menu-item-has-children>a:after{background:url(https://palark.com/wp-content/themes/palark/assets/fonts/menu-chevron.svg) 50%/contain no-repeat;content:"";cursor:pointer;height:1.5rem;position:absolute;right:1rem;top:50%;transform:translateY(-50%);transition:transform .2s ease;width:1.5rem}.header__menu .menu-item-has-children.open{background-color:#f4f3f4}.header__menu .menu-item-has-children.open>a:after{transform:translateY(-50%) rotate(180deg)}.header__menu .menu-item__icon{display:inline-block;flex:0 0 1.125rem;height:1.125rem;margin-right:.25rem;object-fit:contain;vertical-align:middle;width:1.125rem}.header__menu .sidebar__nav>.menu-item:not(.menu-item-has-children)>a{align-items:center;box-sizing:border-box;display:flex;min-height:3rem;padding:.875rem 1rem;width:100%}}.header__menu .sub-menu-container{position:relative}@media screen and (max-width:991px){.header__menu .sub-menu-container{box-sizing:border-box;display:none;padding:0 1rem 1rem;width:100%}}.header__menu .sub-menu-container .menu-item{position:relative}@media screen and (max-width:991px){.header__menu .sub-menu-container .menu-item{display:block}.header__menu .menu-item-has-children.open>.sub-menu-container{display:block;padding-top:1rem}.header__menu .sub-menu{gap:1.25rem;width:100%}.header__menu .sub-menu a{align-items:center;color:#231f20;display:flex;font-size:1rem;line-height:1.6;text-decoration:none;white-space:normal;width:100%}.header__menu .sub-menu.grouped-menu{gap:2rem}.header__menu .sub-menu.grouped-menu .menu-group{display:block}.header__menu .sub-menu.grouped-menu .menu-group__title{display:block;font-size:1rem;font-weight:700;line-height:1.2;text-transform:uppercase}.header__menu .sub-menu.grouped-menu .menu-group__items{display:flex;flex-direction:column;gap:1.25rem;margin:1.25rem 0 0;padding:0}.header__menu .sub-menu.grouped-menu>.menu-item__last{border-top:.0625rem solid #7e7e7e;padding-top:1.5rem}}.header__menu__footer{align-items:flex-end;display:flex;justify-content:space-between;padding-bottom:1.25rem}.header__menu__footer .socials{align-items:center;display:flex;gap:15px}.header__menu__footer .socials a{width:1.875rem}.header__menu__footer .socials svg{display:block;height:auto;width:100%}.header__menu__buttons{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.5rem}.header__menu__buttons .button{margin:0}.button--black.button,.button--black.wpcf7-submit,.menu-item.button a,.wp-block-button a,a.button,a.wpcf7-submit,button.button,button.wpcf7-submit,input.button,input.wpcf7-submit{align-items:center;border:0;border-radius:1rem;box-sizing:border-box;display:inline-flex;font-size:1.25rem;font-weight:700;justify-content:center;line-height:1.6;min-height:3.5rem;min-width:11.25rem;padding:.75rem 1.75rem;position:relative;text-align:center;text-decoration:none;transition:background-color .3s cubic-bezier(.123,.837,.404,.902),border-color .3s cubic-bezier(.123,.837,.404,.902),color .3s cubic-bezier(.123,.837,.404,.902);user-select:none;width:fit-content}@media screen and (max-width:479px){.button--black.button,.button--black.wpcf7-submit,.menu-item.button a,.wp-block-button a,a.button,a.wpcf7-submit,button.button,button.wpcf7-submit,input.button,input.wpcf7-submit{font-size:1.125rem}}.button--black.button:not(:disabled):not([aria-disabled=true]),.button--black.wpcf7-submit:not(:disabled):not([aria-disabled=true]),.menu-item.button a:not(:disabled):not([aria-disabled=true]),.wp-block-button a:not(:disabled):not([aria-disabled=true]),a.button:not(:disabled):not([aria-disabled=true]),a.wpcf7-submit:not(:disabled):not([aria-disabled=true]),button.button:not(:disabled):not([aria-disabled=true]),button.wpcf7-submit:not(:disabled):not([aria-disabled=true]),input.button:not(:disabled):not([aria-disabled=true]),input.wpcf7-submit:not(:disabled):not([aria-disabled=true]){cursor:pointer}.button--black.button:disabled,.button--black.wpcf7-submit:disabled,.menu-item.button a:disabled,.menu-item.button a[aria-disabled=true],.wp-block-button a:disabled,.wp-block-button a[aria-disabled=true],[aria-disabled=true].button--black.button,[aria-disabled=true].button--black.wpcf7-submit,a.button:disabled,a.wpcf7-submit:disabled,a[aria-disabled=true].button,a[aria-disabled=true].wpcf7-submit,button.button:disabled,button.wpcf7-submit:disabled,button[aria-disabled=true].button,button[aria-disabled=true].wpcf7-submit,input.button:disabled,input.wpcf7-submit:disabled,input[aria-disabled=true].button,input[aria-disabled=true].wpcf7-submit{cursor:not-allowed;opacity:.65}.button--black.button:focus-visible,.button--black.wpcf7-submit:focus-visible,.menu-item.button a:focus-visible,.wp-block-button a:focus-visible,a.button:focus-visible,a.wpcf7-submit:focus-visible,button.button:focus-visible,button.wpcf7-submit:focus-visible,input.button:focus-visible,input.wpcf7-submit:focus-visible{outline:.1875rem solid #9540ff;outline-offset:.1875rem}.button--small.button--black.button,.button--small.button--black.wpcf7-submit,.menu-item.button a.button--small,.wp-block-button a.button--small,a.button--small.button,a.button--small.wpcf7-submit,button.button--small.button,button.button--small.wpcf7-submit,input.button--small.button,input.button--small.wpcf7-submit{border-radius:8px;font-size:.875rem;gap:10px;line-height:1.6;min-height:0;min-width:0;padding:4px 10px 5px 16px;width:fit-content}@media screen and (max-width:479px){.button--small.button--black.button,.button--small.button--black.wpcf7-submit,.menu-item.button a.button--small,.wp-block-button a.button--small,a.button--small.button,a.button--small.wpcf7-submit,button.button--small.button,button.button--small.wpcf7-submit,input.button--small.button,input.button--small.wpcf7-submit{font-size:1.125rem}}.button--upload.button--black.button,.button--upload.button--black.wpcf7-submit,.menu-item.button a.button--upload,.wp-block-button a.button--upload,a.button--upload.button,a.button--upload.wpcf7-submit,button.button--upload.button,button.button--upload.wpcf7-submit,input.button--upload.button,input.button--upload.wpcf7-submit{background-color:#fff;border-color:#00ddba;border-style:dashed;color:#000;font-size:1rem;font-weight:400;min-height:0;min-width:0;width:100%}.button--upload.button--black.button:hover,.button--upload.button--black.wpcf7-submit:hover,.menu-item.button a.button--upload:hover,.wp-block-button a.button--upload:hover,a.button--upload.button:hover,a.button--upload.wpcf7-submit:hover,button.button--upload.button:hover,button.button--upload.wpcf7-submit:hover,input.button--upload.button:hover,input.button--upload.wpcf7-submit:hover{background-color:inherit;border-style:solid}.button--red.button--black.button,.button--red.button--black.wpcf7-submit,.menu-item.button a.button--red,.wp-block-button a.button--red,a.button--red.button,a.button--red.wpcf7-submit,button.button--red.button,button.button--red.wpcf7-submit,input.button--red.button,input.button--red.wpcf7-submit{background-color:#f14040;border:2px solid #f14040;color:#fff}.button--red_border.button--black.button,.button--red_border.button--black.wpcf7-submit,.menu-item.button a.button--red_border,.wp-block-button a.button--red_border,a.button--red_border.button,a.button--red_border.wpcf7-submit,button.button--red_border.button,button.button--red_border.wpcf7-submit,input.button--red_border.button,input.button--red_border.wpcf7-submit{background-color:transparent;border:2px solid #f14040;color:#f14040}.button--red_border.button--black.button:hover,.button--red_border.button--black.wpcf7-submit:hover,.menu-item.button a.button--red_border:hover,.wp-block-button a.button--red_border:hover,a.button--red_border.button:hover,a.button--red_border.wpcf7-submit:hover,button.button--red_border.button:hover,button.button--red_border.wpcf7-submit:hover,input.button--red_border.button:hover,input.button--red_border.wpcf7-submit:hover{background-color:#f14040;color:#fff}.loading.button--black.button,.loading.button--black.button:hover,.loading.button--black.wpcf7-submit,.loading.button--black.wpcf7-submit:hover,.menu-item.button a.loading,.menu-item.button a.loading:hover,.wp-block-button a.loading,.wp-block-button a.loading:hover,a.loading.button,a.loading.button:hover,a.loading.wpcf7-submit,a.loading.wpcf7-submit:hover,button.loading.button,button.loading.button:hover,button.loading.wpcf7-submit,button.loading.wpcf7-submit:hover,input.loading.button,input.loading.button:hover,input.loading.wpcf7-submit,input.loading.wpcf7-submit:hover{background-color:#bcbcbc}.button--black.button,.button--black.wpcf7-submit,a.button,a.wpcf7-submit,button.button,button.wpcf7-submit,input.button,input.wpcf7-submit{background-color:#231f20;color:#fff}.button--black.button:before,.button--black.wpcf7-submit:before,a.button:before,a.wpcf7-submit:before,button.button:before,button.wpcf7-submit:before,input.button:before,input.wpcf7-submit:before{left:-4px}.button--black.button:after,.button--black.wpcf7-submit:after,a.button:after,a.wpcf7-submit:after,button.button:after,button.wpcf7-submit:after,input.button:after,input.wpcf7-submit:after{right:-4px}.button--black.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),.button--black.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active),a.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),a.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active),button.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),button.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active),input.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),input.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active){background-color:#0fdfbd;color:#231f20}.button--black.button.full-width,.button--black.wpcf7-submit.full-width,a.button.full-width,a.wpcf7-submit.full-width,button.button.full-width,button.wpcf7-submit.full-width,input.button.full-width,input.wpcf7-submit.full-width{width:100%}@media screen and (max-width:767px){.buttons-row,.buttons-row .button{width:100%}}@media screen and (max-width:479px){.pricing-cta .buttons-row .button{font-size:1.125rem}}.menu-item.button--primary a,.wp-block-button--primary a{background-color:#231f20;color:#fff}.menu-item.button--primary a:is(:hover,:active),.wp-block-button--primary a:is(:hover,:active){background-color:#0fdfbd;color:#231f20}.all_link{align-items:center;display:inline-flex;font-size:1.125rem;font-weight:700;gap:1rem;margin-top:1.5rem;text-decoration:none}@media screen and (min-width:768px){.all_link:hover span{left:-4px}}@media screen and (min-width:992px){.all_link{font-size:1.25rem}}.all_link span{height:24px;left:0;position:relative;transition:.3s;width:24px}.wp-block-group.button--red .button{background-color:#f14040;border:2px solid #f14040;color:#fff}.wp-block-group.button--red .button_border{background-color:transparent;border:2px solid #f14040;color:#f14040}.wp-block-group.button--red .button_border:hover{background-color:#f14040;color:#fff}.wp-block-group-mail{position:relative}.wp-block-group-mail:after{content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMuNTU1IDcuMTY4YTEgMSAwIDEgMC0xLjExIDEuNjY0bDEuMTEtMS42NjRabTcuMzM2IDYuMDkyLjU1NC0uODMyLS41NTQuODMyWm0yLjIxOCAwLS41NTQtLjgzMi41NTQuODMyWm04LjQ0Ni00LjQyOGExIDEgMCAxIDAtMS4xMS0xLjY2NGwxLjExIDEuNjY0Wm0tMTkuMTEgMCA3Ljg5IDUuMjYgMS4xMS0xLjY2NC03Ljg5LTUuMjYtMS4xMSAxLjY2NFptNy44OSA1LjI2YTMgMyAwIDAgMCAzLjMzIDBsLTEuMTEtMS42NjRhMSAxIDAgMCAxLTEuMTEgMGwtMS4xMSAxLjY2NFptMy4zMyAwIDcuODktNS4yNi0xLjExLTEuNjY0LTcuODkgNS4yNiAxLjExIDEuNjY0Wk01IDIwaDE0di0ySDV2MlptMTQgMGEzIDMgMCAwIDAgMy0zaC0yYTEgMSAwIDAgMS0xIDF2MlptMy0zVjdoLTJ2MTBoMlptMC0xMGEzIDMgMCAwIDAtMy0zdjJhMSAxIDAgMCAxIDEgMWgyWm0tMy0zSDV2MmgxNFY0Wk01IDRhMyAzIDAgMCAwLTMgM2gyYTEgMSAwIDAgMSAxLTFWNFpNMiA3djEwaDJWN0gyWm0wIDEwYTMgMyAwIDAgMCAzIDN2LTJhMSAxIDAgMCAxLTEtMUgyWiIvPjwvc3ZnPg==);height:24px;margin-left:.5rem;position:relative;width:24px}.button.mt-40{margin-top:40px}.button.margin-top-small{margin-right:auto;margin-top:2rem}.button.margin-top-small.center{align-items:center}.button.hidden{display:none}.button.read-more{font-size:1rem;font-weight:500;margin-top:2rem;padding:.7rem 1.5rem}.button.read-more,.button.round{color:#fff;flex-direction:row;line-height:100%}.button.round{border-radius:50px;font-weight:700;height:2rem;margin-top:2.5rem;padding:0;width:2rem}.button.margin-bottom-m{margin-bottom:1.8rem}.button.submit-contact-form{margin-left:auto;margin-top:2.375rem}.button.outline{background-color:#fff;box-shadow:inset 0 0 0 .125rem #231f20;color:#000}.button.mr-s{margin-right:1.2rem}.button.no-transitions-duplicate-page{transition-property:none}.button.center{margin-left:auto;margin-right:auto}.button-mail{position:relative}.button-mail:after{content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMuNTU1IDcuMTY4YTEgMSAwIDEgMC0xLjExIDEuNjY0bDEuMTEtMS42NjRabTcuMzM2IDYuMDkyLjU1NC0uODMyLS41NTQuODMyWm0yLjIxOCAwLS41NTQtLjgzMi41NTQuODMyWm04LjQ0Ni00LjQyOGExIDEgMCAxIDAtMS4xMS0xLjY2NGwxLjExIDEuNjY0Wm0tMTkuMTEgMCA3Ljg5IDUuMjYgMS4xMS0xLjY2NC03Ljg5LTUuMjYtMS4xMSAxLjY2NFptNy44OSA1LjI2YTMgMyAwIDAgMCAzLjMzIDBsLTEuMTEtMS42NjRhMSAxIDAgMCAxLTEuMTEgMGwtMS4xMSAxLjY2NFptMy4zMyAwIDcuODktNS4yNi0xLjExLTEuNjY0LTcuODkgNS4yNiAxLjExIDEuNjY0Wk01IDIwaDE0di0ySDV2MlptMTQgMGEzIDMgMCAwIDAgMy0zaC0yYTEgMSAwIDAgMS0xIDF2MlptMy0zVjdoLTJ2MTBoMlptMC0xMGEzIDMgMCAwIDAtMy0zdjJhMSAxIDAgMCAxIDEgMWgyWm0tMy0zSDV2MmgxNFY0Wk01IDRhMyAzIDAgMCAwLTMgM2gyYTEgMSAwIDAgMSAxLTFWNFpNMiA3djEwaDJWN0gyWm0wIDEwYTMgMyAwIDAgMCAzIDN2LTJhMSAxIDAgMCAxLTEtMUgyWiIvPjwvc3ZnPg==);height:24px;margin-left:.5rem;position:relative;width:24px}.small-hero-inner{align-items:flex-end;bottom:auto;flex-direction:row;height:45%;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:768px){.small-hero-inner{flex-direction:column;height:55%}}@media screen and (min-width:992px){.small-hero-inner{flex-direction:column;height:55%}}@media screen and (min-width:1440px){.small-hero-inner{align-items:center;flex-direction:row;height:39.6%;margin-left:auto;margin-right:auto;position:absolute;z-index:-1}}.hero.hero-main{background:#01a2fd;overflow:hidden;position:relative}.hero.hero-main.section{margin-bottom:1.5rem;margin-top:4.5rem;padding:3.5rem 0}@media screen and (min-width:768px){.hero.hero-main.section{margin-bottom:2rem;margin-top:6rem;padding:4.5rem 0}}@media screen and (min-width:992px){.hero.hero-main.section{padding:6.5rem 0}}.hero__row{align-items:center;display:flex;flex-direction:row;justify-content:flex-end;width:100%}.hero__section-top{gap:2.5rem;height:100%;position:relative;z-index:5}.hero__heading-wrap,.hero__section-top{display:flex;flex-direction:column;width:100%}.hero__heading-wrap{row-gap:1.5rem}.hero__heading-wrap h1{font-size:1.75rem;margin-bottom:0}@media screen and (min-width:992px){.hero__heading-wrap h1{font-size:2.5rem}}.hero__heading-wrap h1 span{color:#fff}.hero__buttons{align-items:center;display:flex;gap:1.25rem}.hero__buttons .button:not(:disabled):not([aria-disabled=true]):is(:hover,:active){background-color:#fff;color:#231f20}.hero-card-right{align-items:flex-start;display:flex;flex-direction:column;justify-content:flex-start;margin-left:auto;width:100%}@media screen and (max-width:479px){.hero-card-right{height:auto}}.hero-card-right.negative-margin-top{height:auto;margin-top:-2.7rem;min-width:55%;padding-top:2.75rem;width:auto}@media screen and (max-width:991px){.hero-card-right.negative-margin-top{height:50%}}@media screen and (max-width:767px){.hero-card-right.negative-margin-top{width:41%}}@media screen and (max-width:479px){.hero-card-right.negative-margin-top{padding-bottom:.625rem}}.hero-card-right.purple{background-color:#a55cff;width:50%}@media screen and (max-width:991px){.hero-card-right.purple{margin-top:0;min-width:40%;width:100%}}@media screen and (max-width:767px){.hero-card-right.purple{margin-top:0;width:100%}}@media screen and (max-width:479px){.hero-card-right.purple{height:40%;width:100%}}.hero-card-right.blue{background-color:#00a1fc;display:flex;min-width:50%;overflow:visible;width:55%}@media screen and (min-width:992px)and (max-width:1280px){.hero-card-right.blue{margin-bottom:60px;max-width:46%;min-width:40%}}@media screen and (max-width:991px){.hero-card-right.blue{margin-top:0;min-width:40%;width:100%}}@media screen and (max-width:767px){.hero-card-right.blue{margin-top:0;width:80%}}@media screen and (max-width:479px){.hero-card-right.blue{height:40%;width:100%}}.hero-card-right.green{background-color:#0fdfbd;max-width:56%;min-width:50%}@media screen and (min-width:992px)and (max-width:1280px){.hero-card-right.green{margin-bottom:200px;max-width:46%;min-width:40%}}@media screen and (max-width:991px){.hero-card-right.green{margin-top:0;min-width:40%;width:100%}}@media screen and (max-width:767px){.hero-card-right.green{margin-top:0;max-width:100%;width:100%}}@media screen and (max-width:479px){.hero-card-right.green{height:40%;width:100%}}.hero__image{height:100%;margin-left:auto}.hero__image-block-left{display:none}@media screen and (min-width:768px){.hero__image-block-left{align-items:center;bottom:-1%;display:flex;height:100%;justify-content:flex-end;max-width:75%;position:absolute;right:-35%;top:auto;width:100%;z-index:0}}@media screen and (min-width:992px){.hero__image-block-left{max-width:100%;right:-15%}}@media screen and (min-width:1280px){.hero__image-block-left{right:0}}@media screen and (min-width:1600px){.hero__image-block-left{min-height:615px}}.hero__image-wrap{margin-bottom:4.2rem}.hero__subtext{flex-direction:column;font-size:1rem;height:auto;line-height:160%;margin-right:auto;max-width:475px;position:relative}@media screen and (min-width:480px){.hero__subtext{font-size:1.125rem}}@media screen and (min-width:992px){.hero__subtext{font-size:1.25rem}}.hero__subtext-right{flex-direction:column;height:auto;margin-bottom:2.1rem;margin-left:auto;margin-top:auto}@media screen and (max-width:991px){.hero__subtext-right{margin-bottom:2.4rem;margin-top:-6%}}@media screen and (max-width:767px){.hero__subtext-right{font-size:.9rem;margin-top:-6%}}@media screen and (max-width:479px){.hero__subtext-right{font-size:.7rem;margin-bottom:2.5rem;margin-top:-8%}}.hero__block-left{display:flex;flex-direction:column;margin-right:5%;min-width:45%}.hero__block-left.center-vert{align-items:flex-start;flex-direction:column;justify-content:flex-end}.hero__block-left.mob-landscape-mt-2{justify-content:center;width:47%}@media screen and (min-width:992px)and (max-width:1280px){.hero__block-left.mob-landscape-mt-2{width:56%}}.hero__block-left.neg-margin-top{max-width:46%}@media screen and (min-width:992px)and (max-width:1280px){.hero__block-left.neg-margin-top{max-width:56%;width:56%}}.hero__img{align-items:center;display:flex;flex-direction:column;justify-content:flex-start;margin-top:110px;position:relative;width:100%}@media screen and (max-width:991px){.hero__img{margin-top:90px}}@media screen and (max-width:767px){.hero__img{margin-top:80px}}@media screen and (max-width:479px){.hero__img{margin-top:70px}}</style>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/css/main.min.css?ver=1.6.41" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/css/main.min.css?ver=1.6.41" media=""></noscript>
<link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/css/blog.min.css?ver=1.6.41" media="">
<link rel="alternate" type="application/rss+xml" title="Palark » Blog Feed" href="https://palark.com/blog/feed/">
<link rel="icon" href="https://palark.com/wp-content/uploads/2023/07/favicon.png" sizes="32x32" />
<link rel="icon" href="https://palark.com/wp-content/uploads/2023/07/favicon.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://palark.com/wp-content/uploads/2023/07/favicon.png" />
<meta name="msapplication-TileImage" content="https://palark.com/wp-content/uploads/2023/07/favicon.png" />
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M4P3BZ5');</script>
<!-- End Google Tag Manager -->
</head>
<body class="wp-singular post-template-default single single-post postid-2802 single-format-standard wp-custom-logo wp-theme-palark">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M4P3BZ5"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be&nbsp;called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://palark.matomo.cloud/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='//cdn.matomo.cloud/palark.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code --> <header class="header">
<div class="content">
<div class="header__content">
<a href="https://palark.com/" class="header__logo">
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 18" fill="none"><path fill="#231F20" d="M87.77 3.18h-2.98v13.53h2.98V3.18ZM100 3.18h-3.68l-6.85 6.76 6.85 6.77H100l-6.85-6.77L100 3.18ZM31.33 12.68 23.4.5l-7.9 12.18h3.54l4.36-7.03 4.37 7.03h3.55ZM62.25 12.68 54.33.5l-7.9 12.18h3.54l4.36-7.03 4.36 7.03h3.56ZM80.14 16.71l-3.76-4.36a4.76 4.76 0 0 0-1.75-9.17h-9.22v13.53h2.98V5.91h6.25a2.01 2.01 0 1 1 0 4.03H71.2l-1.46 2.74h3.5l3.48 4.03h3.44ZM9.23 3.18H0v13.53h2.99V5.91h6.25a2.01 2.01 0 1 1 0 4.03H5.78l-1.46 2.74h4.92a4.75 4.75 0 0 0 0-9.5h-.01ZM37.78 13.98V3.18H34.8v13.53h8.8l1.76-2.73h-7.58Z"></path></svg> </a>
<div class="header__controls">
<div class="language-links">
<a class="active">En</a><a class="second" href="https://palark.de/">De</a></div> <div class="header__right">
<div class="header__menu">
<div class="container">
<div class="sidebar__buttons">
<a href="/contact-us/"
class="button button--dark">Contact us</a>
</div>
<a href="/" class="">Home</a>
<ul id="top-header-nav" class="nav sidebar__nav"><li id="menu-item-16" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item--grouped-submenu"><a>Services</a>
<div class='sub-menu-container sub-menu-container--grouped'><ul class='sub-menu grouped-menu'>
<li id="menu-item-16247" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-group"><span class="menu-group__title">Continuous Support</span>
<ul class='menu-group__items'>
<li id="menu-item-1395" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/sre-as-a-service/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/sre.svg" alt="" class="menu-item__icon">SRE as a Service</a></li>
<li id="menu-item-1392" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/devops-as-a-service/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/DevOps-as-a-Service.svg" alt="" class="menu-item__icon">DevOps as a Service</a></li>
<li id="menu-item-4386" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/devops-insurance/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/devops.svg" alt="" class="menu-item__icon">DevOps insurance</a></li>
</ul>
</li>
<li id="menu-item-16248" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-group"><span class="menu-group__title">Time &#038; Materials</span>
<ul class='menu-group__items'>
<li id="menu-item-1394" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/cloud-server-audit/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Infrastructure.svg" alt="" class="menu-item__icon">Infrastructure &amp; CI/CD audit</a></li>
<li id="menu-item-1393" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/kubernetes-migration-cloud-enablement/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Cloud.svg" alt="" class="menu-item__icon">Kubernetes and cloud migration</a></li>
<li id="menu-item-1396" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/technology-consulting/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/RD.svg" alt="" class="menu-item__icon">R&amp;D and technology consulting</a></li>
</ul>
</li>
<li id="menu-item-16249" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-group"><span class="menu-group__title">Industry Solutions</span>
<ul class='menu-group__items'>
<li id="menu-item-498" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/kubernetes-support/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Kubernative.svg" alt="" class="menu-item__icon">Kubernetes support</a></li>
<li id="menu-item-89" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/solution-for-saas/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Solution.svg" alt="" class="menu-item__icon">Solution for SaaS</a></li>
<li id="menu-item-2131" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/private-self-hosted-llm/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Private.svg" alt="" class="menu-item__icon">Private, self-hosted LLM</a></li>
<li id="menu-item-4514" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/vercel-alternative-migration/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Migration.svg" alt="" class="menu-item__icon">Migration from Vercel</a></li>
</ul>
</li>
<li id="menu-item-1666" class="menu-item__last menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Group-8980.svg" alt="" class="menu-item__icon">All services</a></li>
</ul></div>
</li>
<li id="menu-item-4838" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children"><a>Pricing</a>
<div class='sub-menu-container'><ul class='sub-menu'>
<li id="menu-item-1884" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/pricing/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Frame.svg" alt="" class="menu-item__icon">DevOps and SRE as a Service comparison</a></li>
</ul></div>
</li>
<li id="menu-item-112" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/rnd/">R&#038;D</a></li>
<li id="menu-item-699" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children"><a>Company</a>
<div class='sub-menu-container'><ul class='sub-menu'>
<li id="menu-item-129" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/about/">About us</a></li>
<li id="menu-item-1486" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/news/">News</a></li>
<li id="menu-item-700" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/about/meet-us/">Meet us</a></li>
<li id="menu-item-1162" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/about/kubernative/">Kubernative channel</a></li>
</ul></div>
</li>
<li id="menu-item-3704" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent"><a href="/blog/">Blog</a></li>
</ul> </div>
</div>
<a href="/contact-us/" class="button pc-only-button button--dark">Contact us</a>
</div>
</div>
<div class="hamburger hamburger--collapse header__hamburger" type="button">
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
</header>
<div class="header-blog">
<div class="header-blog__content">
<div class="container">
<div class="header-blog__left">
<a href="/blog/">
<img height="28" width="111" src="https://palark.com/wp-content/themes/palark/assets/images/blog-logo.svg"
alt="blog-logo">
</a>
</div>
<form action="https://palark.com/" class="form_search" role="search">
<input type="text" name="s" class="search" value="" placeholder="Search" autocomplete="off"/>
</form> <div class="header-blog__categories">
<select class="a-select right" multiple="multiple" data-placeholder="Posts by tags">
<optgroup label="Popular">
<option value="/blog/tag/kubernetes/">Kubernetes (83)</option><option value="/blog/tag/tools/">tools (31)</option><option value="/blog/tag/databases/">databases (28)</option><option value="/blog/tag/migrations/">migrations (14)</option><option value="/blog/tag/postgresql/">PostgreSQL (14)</option> </optgroup>
<optgroup label="A-Z">
<option value="/blog/tag/aiops/">AIOps (2)</option><option value="/blog/tag/ansible/">Ansible (1)</option><option value="/blog/tag/arm/">ARM (1)</option><option value="/blog/tag/aws/">AWS (4)</option><option value="/blog/tag/backups/">backups (3)</option><option value="/blog/tag/benchmarking/">benchmarking (2)</option><option value="/blog/tag/best-practices/">best practices (9)</option><option value="/blog/tag/business/">business (4)</option><option value="/blog/tag/caching/">caching (3)</option><option value="/blog/tag/calico/">Calico (1)</option><option value="/blog/tag/cassandra/">Cassandra (2)</option><option value="/blog/tag/ceph/">Ceph (5)</option><option value="/blog/tag/cert-manager/">cert-manager (1)</option><option value="/blog/tag/ci-cd/">CI/CD (10)</option><option value="/blog/tag/cli/">CLI (4)</option><option value="/blog/tag/clickhouse/">ClickHouse (3)</option><option value="/blog/tag/cni/">CNI (2)</option><option value="/blog/tag/cockroachdb/">CockroachDB (1)</option><option value="/blog/tag/comparison/">comparison (9)</option><option value="/blog/tag/databases/">databases (28)</option><option value="/blog/tag/ebpf/">eBPF (2)</option><option value="/blog/tag/elasticsearch/">Elasticsearch (5)</option><option value="/blog/tag/etcd/">etcd (3)</option><option value="/blog/tag/failures/">failures (11)</option><option value="/blog/tag/finops/">FinOps (2)</option><option value="/blog/tag/fluentd/">Fluentd (1)</option><option value="/blog/tag/gitlab/">GitLab (5)</option><option value="/blog/tag/helm/">Helm (6)</option><option value="/blog/tag/hyperconvergence/">hyperconvergence (1)</option><option value="/blog/tag/iac/">IaC (5)</option><option value="/blog/tag/ingress/">Ingress (3)</option><option value="/blog/tag/kafka/">Kafka (2)</option><option value="/blog/tag/keycloak/">Keycloak (1)</option><option value="/blog/tag/keydb/">KeyDB (3)</option><option value="/blog/tag/kubernetes/">Kubernetes (83)</option><option value="/blog/tag/kubernetes-operators/">Kubernetes operators (11)</option><option value="/blog/tag/linux/">Linux (4)</option><option value="/blog/tag/logging/">logging (5)</option><option value="/blog/tag/logstash/">Logstash (1)</option><option value="/blog/tag/memcached/">memcached (1)</option><option value="/blog/tag/migrations/">migrations (14)</option><option value="/blog/tag/mongodb/">MongoDB (2)</option><option value="/blog/tag/mysql/">MySQL (2)</option><option value="/blog/tag/networking/">networking (6)</option><option value="/blog/tag/nginx/">nginx (1)</option><option value="/blog/tag/observability/">observability (13)</option><option value="/blog/tag/palark/">Palark (7)</option><option value="/blog/tag/patroni/">Patroni (3)</option><option value="/blog/tag/php/">PHP (1)</option><option value="/blog/tag/postgresql/">PostgreSQL (14)</option><option value="/blog/tag/prometheus/">Prometheus (5)</option><option value="/blog/tag/python/">Python (4)</option><option value="/blog/tag/rabbitmq/">RabbitMQ (1)</option><option value="/blog/tag/redis/">Redis (4)</option><option value="/blog/tag/rook/">Rook (3)</option><option value="/blog/tag/security/">security (7)</option><option value="/blog/tag/sentry/">Sentry (1)</option><option value="/blog/tag/serverless/">serverless (2)</option><option value="/blog/tag/software-development/">software development (2)</option><option value="/blog/tag/ssl/">SSL (1)</option><option value="/blog/tag/storage/">storage (10)</option><option value="/blog/tag/success-stories/">success stories (3)</option><option value="/blog/tag/terraform/">Terraform (3)</option><option value="/blog/tag/tools/">tools (31)</option><option value="/blog/tag/trends/">trends (9)</option><option value="/blog/tag/troubleshooting/">troubleshooting (10)</option><option value="/blog/tag/vault/">Vault (1)</option><option value="/blog/tag/vector/">Vector (2)</option><option value="/blog/tag/virtualization/">virtualization (1)</option><option value="/blog/tag/vpn/">VPN (1)</option><option value="/blog/tag/werf/">werf (3)</option><option value="/blog/tag/yaml/">YAML (2)</option><option value="/blog/tag/zookeeper/">ZooKeeper (1)</option> </optgroup>
</select> </div>
</div>
</div>
</div> <main class="wrapper">
<div class="container container--bordered">
<div class="content full">
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/databases/"
class="content__tags-item content__tags-item--big content__tags-item--main">
databases </a>
</li>
<li>
<a href="https://palark.com/blog/tag/postgresql/"
class="content__tags-item content__tags-item--big">
PostgreSQL </a>
</li>
</ul>
<h1 class="content__title">
Upgrading PostgreSQL with no data loss and minimal downtime </h1>
<div class="content__top">
<div class="content__column">
<div class="content__date">
23 September 2025 </div>
<div class="content__author">
By Timur Nizamutdinov, software engineer </div>
<img width="1024" height="521" src="https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade-1024x521.png" class="content__image wp-post-image" alt="Postgresql database upgrade" decoding="async" fetchpriority="high" srcset="https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade-1024x521.png 1024w, https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade-550x280.png 550w, https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade-768x391.png 768w, https://palark.com/wp-content/uploads/2025/09/postgresql-database-upgrade.png 1964w" sizes="(max-width: 1024px) 100vw, 1024px" /> </div>
</div>
<div class="content__wrapper">
<aside class="content__toc">
<div class="toc__title">Content</div>
<div class="toc__show-more" style="display: none">
Show more <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path d="M15 6L9 12L15 18" stroke="black" stroke-width="4" stroke-linecap="round"
stroke-linejoin="round"/>
</svg>
</div>
</aside>
<div class="content__column">
<article class="content__content post__content">
<p class="wp-block-paragraph">Recently, we&nbsp;had to&nbsp;upgrade a&nbsp;heavily loaded PostgreSQL cluster from&nbsp;version 13 to&nbsp;16 while keeping downtime minimal. The&nbsp;cluster, consisting of a&nbsp;master and&nbsp;a&nbsp;replica, was handling over 20,000 transactions per second. The&nbsp;process of upgrading PostgreSQL to&nbsp;a&nbsp;newer version also helped resolve several performance and&nbsp;maintenance issues.</p>
<p class="wp-block-paragraph">Particularly, as the&nbsp;system’s load grew, the&nbsp;existing servers became a&nbsp;bottleneck. They had to&nbsp;be&nbsp;replaced with more powerful machines with larger disk volumes. This&nbsp;was necessary to&nbsp;handle the&nbsp;increasing amount of data while keeping high transaction processing speeds.</p>
<p class="wp-block-paragraph">On&nbsp;top of that, upgrading to&nbsp;a&nbsp;newer version of PostgreSQL brought new features and&nbsp;enhancements to&nbsp;streamline application development and&nbsp;optimization. Version 13 is&nbsp;also approaching its end-of-life later this&nbsp;year, so the&nbsp;upgrade was essential to&nbsp;ensure we&nbsp;have access to&nbsp;the&nbsp;latest patches and&nbsp;updates.</p>
<p class="wp-block-paragraph">In&nbsp;this&nbsp;article, I&#8217;ll walk you through the&nbsp;upgrade process and&nbsp;show how to&nbsp;overcome the&nbsp;challenges we&nbsp;ran into along the&nbsp;way. In&nbsp;general, the&nbsp;procedure involved two main stages:</p>
<ul class="wp-block-list">
<li>First, we&nbsp;created a&nbsp;new PostgreSQL replica running the&nbsp;desired version via logical replication.</li>
<li>Next, we&nbsp;transferred the&nbsp;master role to&nbsp;the&nbsp;new replica.</li>
</ul>
<h2 class="wp-block-heading">Creating a&nbsp;new replica: Logical replication</h2>
<p class="wp-block-paragraph">Our initial plan was to&nbsp;set up logical replication and&nbsp;test it&nbsp;for&nbsp;the&nbsp;existing database. Here&#8217;s what we&nbsp;did to&nbsp;achieve that.</p>
<ol class="wp-block-list">
<li>Migrate the&nbsp;PostgreSQL database and&nbsp;the&nbsp;schema of the&nbsp;desired database:</li>
</ol>
<pre class="wp-block-code bash"><code>pg_dumpall --database=postgres --host=a.b.c.d --no-password --globals-only --no-privileges | psql
pg_dump --dbname our_db --host=a.b.c.d --no-password --create --schema-only | psql</code></pre>
<ol start="2" class="wp-block-list">
<li>Create a&nbsp;database publication on&nbsp;the&nbsp;master:</li>
</ol>
<pre class="wp-block-code"><code>CREATE PUBLICATION our_pub FOR&nbsp;ALL TABLES;</code></pre>
<ol start="3" class="wp-block-list">
<li>Create a&nbsp;subscription on&nbsp;the&nbsp;replica:</li>
</ol>
<pre class="wp-block-code"><code>CREATE SUBSCRIPTION our_sub CONNECTION 'host=a.b.c.d dbname=our_db' PUBLICATION our_pub;</code></pre>
<ol start="4" class="wp-block-list">
<li>Check that the&nbsp;publication works on&nbsp;the&nbsp;master:</li>
</ol>
<pre class="wp-block-code"><code>SELECT * FROM&nbsp;pg_catalog.pg_publication;</code></pre>
<ol start="5" class="wp-block-list">
<li>Check that the&nbsp;subscription works on&nbsp;the&nbsp;replica:</li>
</ol>
<pre class="wp-block-code"><code>SELECT * FROM&nbsp;pg_stat_subscription;</code></pre>
<p class="wp-block-paragraph">By doing so, we&nbsp;got a&nbsp;replication rate of about 1 GB per minute. With a&nbsp;3.5 TB database, the&nbsp;migration would take 2-3 days to&nbsp;fully synchronize. But while the&nbsp;database is&nbsp;migrating, the&nbsp;WALs for&nbsp;the&nbsp;replication slot would accumulate. Potentially, the&nbsp;space allotted for&nbsp;them could fill up, causing the&nbsp;master to&nbsp;crash.</p>
<p class="wp-block-paragraph">Obviously, we&nbsp;don&#8217;t want that to&nbsp;happen, and&nbsp;so we&nbsp;decided to&nbsp;stop synchronization, coming up with another option. We&nbsp;decided to&nbsp;run physical replication first and&nbsp;then switch to&nbsp;logical one.</p>
<h2 class="wp-block-heading">Physical and&nbsp;logical replication</h2>
<p class="wp-block-paragraph">The&nbsp;draft action plan was as follows:</p>
<ol class="wp-block-list">
<li>Create a&nbsp;physical replica.</li>
<li>Wait for&nbsp;the&nbsp;physical replica to&nbsp;get to&nbsp;the&nbsp;synchronization point.</li>
<li>Switch to&nbsp;logical replication.</li>
<li>Upgrade PostgreSQL to&nbsp;version 16 using <code>pg_upgrade</code>.</li>
</ol>
<p class="wp-block-paragraph">Testing showed physical replication rates as high as 10 GB per minute, while the&nbsp;rate of WALs growth was not as high as we&nbsp;expected.</p>
<p class="wp-block-paragraph">But one thing still kept us on&nbsp;our toes: how would a&nbsp;logical replica figure out at what point in&nbsp;the&nbsp;LSN it&nbsp;should start working? Fortunately, this&nbsp;one is&nbsp;simple: when configuring logical replication, set the&nbsp;LSN for&nbsp;the&nbsp;slot to&nbsp;use as the&nbsp;starting point. Here is&nbsp;the&nbsp;command to&nbsp;do just that:</p>
<pre class="wp-block-code"><code>SELECT pg_create_logical_replication_slot('logical_replica_slot', 'pgoutput');
SELECT pg_replication_slot_advance('logical_replica_slot', '0/3402801');</code></pre>
<p class="wp-block-paragraph">But how do you determine the&nbsp;LSN value to&nbsp;advance a&nbsp;replication logical slot to? Once the&nbsp;replica is&nbsp;taken offline via <code>promote</code>, a&nbsp;line like this&nbsp;would appear in&nbsp;the&nbsp;PostgreSQL logs: <code>redo done at 0/3402801</code>. It&nbsp;contains information about the&nbsp;last applied transaction’s location. In&nbsp;this&nbsp;case, LSN equals <code>0/3402801</code>. Hence, transactions occurring after this&nbsp;point will be&nbsp;applied to&nbsp;the&nbsp;new instance.</p>
<p class="wp-block-paragraph">Once we&nbsp;had figured out the&nbsp;process, we&nbsp;moved on&nbsp;to&nbsp;specific actions:</p>
<ol class="wp-block-list">
<li>Create a&nbsp;physical replica.</li>
<li>Stop it&nbsp;and&nbsp;promote the&nbsp;instance to&nbsp;autonomous mode.</li>
<li>Switch to&nbsp;logical replication.</li>
<li>Upgrade PostgreSQL to&nbsp;version 16.</li>
</ol>
<p class="wp-block-paragraph">First, we&nbsp;tested the&nbsp;PostgreSQL upgrade from&nbsp;version 13 to&nbsp;version 16, which went well:</p>
<pre class="wp-block-code bash"><code>postgres:~$ /usr/lib/postgresql/16/bin/pg_upgrade --old-datadir=/var/lib/postgresql/13/main --new-datadir=/var/lib/postgresql/16/main --old-bindir=/usr/lib/postgresql/13/bin --new-bindir=/usr/lib/postgresql/16/bin --old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' --new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf' --link
Performing Consistency Checks
Checking cluster versions ok
Checking database user is&nbsp;the&nbsp;install user ok
Checking database connection settings ok
Checking for&nbsp;prepared transactions ok
Checking for&nbsp;system-defined composite types in&nbsp;user tables ok
Checking for&nbsp;reg* data types in&nbsp;user tables ok
Checking for&nbsp;contrib/isn with bigint-passing mismatch ok
Checking for&nbsp;incompatible "aclitem" data type in&nbsp;user tables ok
Checking for&nbsp;user-defined encoding conversions ok
Checking for&nbsp;user-defined postfix operators ok
Checking for&nbsp;incompatible polymorphic functions ok
Creating dump of global objects ok
Creating dump of database schemas ok
Checking for&nbsp;presence of required libraries ok
Checking database user is&nbsp;the&nbsp;install user ok
Checking for&nbsp;prepared transactions ok
Checking for&nbsp;new cluster tablespace directories ok
If&nbsp;pg_upgrade fails after this&nbsp;point, you must re-initdb the&nbsp;new cluster before continuing.
Performing Upgrade
Setting locale and&nbsp;encoding for&nbsp;new cluster ok
Analyzing all rows in&nbsp;the&nbsp;new cluster ok
Freezing all rows in&nbsp;the&nbsp;new cluster ok
Deleting files from&nbsp;new pg_xact ok
Copying old pg_xact to&nbsp;new server ok
Setting oldest XID for&nbsp;new cluster ok
Setting next transaction ID and&nbsp;epoch for&nbsp;new cluster ok
Deleting files from&nbsp;new pg_multixact/offsets ok
Copying old pg_multixact/offsets to&nbsp;new server ok
Deleting files from&nbsp;new pg_multixact/members ok
Copying old pg_multixact/members to&nbsp;new server ok
Setting next multixact ID and&nbsp;offset for&nbsp;new cluster ok
Resetting WAL archives ok
Setting frozenxid and&nbsp;minmxid counters in&nbsp;new cluster ok
Restoring global objects in&nbsp;the&nbsp;new cluster ok
Restoring database schemas in&nbsp;the&nbsp;new cluster ok
Adding ".old" suffix to&nbsp;old global/pg_control ok
If&nbsp;you want to&nbsp;start the&nbsp;old cluster, you will need to&nbsp;remove
the&nbsp;".old" suffix from&nbsp;/var/lib/postgresql/13/main/global/pg_control.old.
Because "link" mode was used, the&nbsp;old cluster cannot be&nbsp;safely
started once the&nbsp;new cluster has been started.
Linking user relation files ok
Setting next OID for&nbsp;new cluster ok
Sync data directory to&nbsp;disk ok
Creating script to&nbsp;delete old cluster ok
Checking for&nbsp;extension updates notice
Your installation contains extensions that should be&nbsp;updated
with the&nbsp;ALTER EXTENSION command. The&nbsp;file
update_extensions.sql
when executed by psql by the&nbsp;database superuser will update
these extensions.
Upgrade Complete</code></pre>
<p class="wp-block-paragraph">Next, we&nbsp;switched a&nbsp;physical replica to&nbsp;a&nbsp;logical one.</p>
<p class="wp-block-paragraph">On&nbsp;the&nbsp;<em>master</em>, we&nbsp;create the&nbsp;logical replication slot, check it&nbsp;and&nbsp;create a&nbsp;publication for&nbsp;all tables:</p>
<pre class="wp-block-code"><code>\c our_db
SELECT pg_create_logical_replication_slot('logical_replica_slot', 'pgoutput');
SELECT * from&nbsp;pg_replication_slots;
CREATE PUBLICATION our_db_pub FOR&nbsp;ALL TABLES;</code></pre>
<p class="wp-block-paragraph">Then, on&nbsp;the&nbsp;<em>replica</em>, we&nbsp;promote it&nbsp;to&nbsp;a&nbsp;standalone one and&nbsp;look for&nbsp;the&nbsp;LSN:</p>
<pre class="wp-block-code"><code>\c postgres
SELECT pg_promote();</code></pre>
<pre class="wp-block-code"><code>cat /var/log/postgresql/postgresql-13-main.log | grep "redo done at"</code></pre>
<p class="wp-block-paragraph">Back to&nbsp;the&nbsp;<em>master</em>, where we&nbsp;move the&nbsp;logical replication slot to&nbsp;the&nbsp;specific LSN:</p>
<pre class="wp-block-code"><code>\c our_db
SELECT pg_replication_slot_advance('logical_replica_slot', 'E330A/4903A1');</code></pre>
<p class="wp-block-paragraph">Finally, we&nbsp;create a&nbsp;subscription on&nbsp;the&nbsp;<em>replica</em>:</p>
<pre class="wp-block-code"><code>\c our_db
CREATE SUBSCRIPTION our_db_sub CONNECTION 'host=a.b.c.d dbname=our_db' PUBLICATION our_db_pub WITH (copy_data=false, slot_name='logical_replica_slot', create_slot=false);</code></pre>
<p class="wp-block-paragraph">We&nbsp;are ready to&nbsp;upgrade it&nbsp;to&nbsp;version 16!</p>
<h2 class="wp-block-heading">Upgrading to&nbsp;PostgreSQL 16</h2>
<p class="wp-block-paragraph">Here&#8217;s what we&nbsp;do to&nbsp;upgrade the&nbsp;PostgreSQL version:</p>
<ol class="wp-block-list">
<li>Install version 16. We&#8217;re using Ubuntu Linux, so it&#8217;s:</li>
</ol>
<pre class="wp-block-code bash"><code>apt install postgresql-16 postgresql-16-repack
apt purge postgresql-16 postgresql-16-repack postgresql-16-repmgr</code></pre>
<ol start="2" class="wp-block-list">
<li>Check whether the&nbsp;installation has been successful, and&nbsp;stop PostgreSQL. At this&nbsp;point, the&nbsp;LSN is&nbsp;saved on&nbsp;the&nbsp;slot; the&nbsp;slot will later resume the&nbsp;publication from&nbsp;this&nbsp;LSN:</li>
</ol>
<pre class="wp-block-code bash"><code>pg_lsclusters<br>systemctl stop postgresql</code></pre>
<ol start="3" class="wp-block-list">
<li>Log in&nbsp;as the&nbsp;PostgreSQL user to&nbsp;perform the&nbsp;upgrade. But first, we&#8217;ll check if&nbsp;the&nbsp;upgrade is&nbsp;possible:</li>
</ol>
<pre class="wp-block-code bash"><code>su postgres
/usr/lib/postgresql/16/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/13/main \
--new-datadir=/var/lib/postgresql/16/main \
--old-bindir=/usr/lib/postgresql/13/bin \
--new-bindir=/usr/lib/postgresql/16/bin \
--old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf' \
--check</code></pre>
<ol start="4" class="wp-block-list">
<li>Prepare the&nbsp;old instance so that we&nbsp;avoid the&nbsp;errors occurring while creating views and&nbsp;other objects during data migration to&nbsp;the&nbsp;new instance:</li>
</ol>
<pre class="wp-block-code"><code>pg_dump -s pghero &gt; pghero.sql
DROP EXTENSION pg_stat_statements CASCADE;
DROP SCHEMA pghero CASCADE;
DROP DATABASE pghero;
DROP SCHEMA repmgr CASCADE;</code></pre>
<ol start="5" class="wp-block-list">
<li>Peform the&nbsp;actual upgrade by creating hard links to&nbsp;the&nbsp;file inodes and&nbsp;log out as the&nbsp;PostgreSQL user:</li>
</ol>
<pre class="wp-block-code bash"><code>/usr/lib/postgresql/16/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/13/main \
--new-datadir=/var/lib/postgresql/16/main \
--old-bindir=/usr/lib/postgresql/13/bin \
--new-bindir=/usr/lib/postgresql/16/bin \
--old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf' \
--link
exit</code></pre>
<ol start="6" class="wp-block-list">
<li>Change ports for&nbsp;the&nbsp;PostgreSQL instances. It&nbsp;might be&nbsp;also helpful to&nbsp;check these PostgreSQL configs for&nbsp;any deprecated options:</li>
</ol>
<pre class="wp-block-code bash"><code>sed -i 's/^port = 5433/port = 5432/' /etc/postgresql/16/main/postgresql.conf
sed -i 's/^port = 5432/port = 5433/' /etc/postgresql/13/main/postgresql.conf</code></pre>
<ol start="7" class="wp-block-list">
<li>Start the&nbsp;PostgreSQL service:</li>
</ol>
<pre class="wp-block-code"><code>systemctl start postgresql</code></pre>
<ol start="8" class="wp-block-list">
<li> Log in&nbsp;as the&nbsp;PostgreSQL user again, update the&nbsp;optimizer stats (they are not carried over from&nbsp;the&nbsp;old instance), delete the&nbsp;old PgSQL v13 instance, and&nbsp;log out:</li>
</ol>
<pre class="wp-block-code bash"><code>su postgres
/usr/lib/postgresql/16/bin/vacuumdb --all --analyze-in-stages
./delete_old_cluster.sh
rm -rf /etc/postgresql/13/main
exit</code></pre>
<ol start="9" class="wp-block-list">
<li>Try to&nbsp;disable and&nbsp;then enable the&nbsp;old subscription to&nbsp;the&nbsp;master database. If&nbsp;that doesn&#8217;t help, disable it&nbsp;and&nbsp;create a&nbsp;new one. <strong>Important: do NOT delete the&nbsp;old subscription</strong>, as this&nbsp;will delete the&nbsp;slot on&nbsp;the&nbsp;master:</li>
</ol>
<pre class="wp-block-code"><code>ALTER SUBSCRIPTION our_db_sub DISABLE;
ALTER SUBSCRIPTION our_db_sub ENABLE;</code></pre>
<ol start="10" class="wp-block-list">
<li>Create a&nbsp;new subscription if&nbsp;the&nbsp;previous step failed:</li>
</ol>
<pre class="wp-block-code"><code>ALTER SUBSCRIPTION our_db_sub DISABLE;
CREATE SUBSCRIPTION our_db_sub_2 CONNECTION 'host=a.b.c.d dbname=our_db' PUBLICATION our_db_pub WITH (copy_data=false, slot_name='logical_replica_slot', create_slot=false);</code></pre>
<ol start="11" class="wp-block-list">
<li>Perform the&nbsp;final checks on&nbsp;your PgSQL servers:</li>
</ol>
<pre class="wp-block-code sql"><code>-- master
SELECT usename,client_addr,state,replay_lag FROM&nbsp;pg_stat_replication;
SELECT slot_name,slot_type,active FROM&nbsp;pg_replication_slots;
-- replica
SELECT * FROM&nbsp;pg_stat_subscription;</code></pre>
<p class="wp-block-paragraph">At this&nbsp;point, we&nbsp;encountered a&nbsp;problem: <strong>the&nbsp;number of records on&nbsp;the&nbsp;replica was different</strong> from&nbsp;the&nbsp;number of records on&nbsp;the&nbsp;master, i.e., the&nbsp;replica lacked some transactions that had occurred during the&nbsp;PostgreSQL upgrade. We&nbsp;suspected they had been lost while we&nbsp;were switching between subscriptions and&nbsp;looking for&nbsp;the&nbsp;right solution.</p>
<p class="wp-block-paragraph">We&nbsp;tried to&nbsp;restore the&nbsp;subscription with no success. So we&nbsp;ended up creating a&nbsp;new subscription alongside the&nbsp;old one. However, simply restarting an old subscription also failed for&nbsp;some reason. The&nbsp;charts and&nbsp;logs showed that the&nbsp;logical replica worker was running, but no data was actually being transferred.</p>
<p class="wp-block-paragraph">Most likely, upgrading the&nbsp;version renewed the&nbsp;version of the&nbsp;<code>pgoutput</code> logical replication extension as well, which had broken the&nbsp;subscription. So that left us with one final option: <strong>create a&nbsp;physical replica</strong> and&nbsp;couple the&nbsp;change to&nbsp;the&nbsp;logical replica with a&nbsp;PgSQL version upgrade.</p>
<h2 class="wp-block-heading">Combining logical replication with version upgrade</h2>
<p class="wp-block-paragraph">The&nbsp;plan was as follows:</p>
<ol class="wp-block-list">
<li>Stop the&nbsp;physical replica.</li>
<li>Save the&nbsp;LSN.</li>
<li>Move the&nbsp;logical slot on&nbsp;the&nbsp;master to&nbsp;that LSN.</li>
<li>Upgrade PgSQL to&nbsp;version 16.</li>
<li>Create a&nbsp;subscription to&nbsp;the&nbsp;master database on&nbsp;the&nbsp;upgraded PgSQL v16 replica.</li>
</ol>
<p class="wp-block-paragraph">We&nbsp;start from&nbsp;the&nbsp;<em>master</em>:</p>
<pre class="wp-block-code"><code>\c our_db
SELECT usename,client_addr,state,replay_lag FROM&nbsp;pg_stat_replication;
SELECT slot_name,slot_type,active FROM&nbsp;pg_replication_slots;
SELECT pg_create_logical_replication_slot('logical_replica_slot', 'pgoutput');
SELECT * FROM&nbsp;pg_replication_slots;
CREATE PUBLICATION our_db_pub FOR&nbsp;ALL TABLES;</code></pre>
<p class="wp-block-paragraph">Then, we&nbsp;move on&nbsp;to&nbsp;the&nbsp;<em>replica</em>:</p>
<pre class="wp-block-code"><code>\c postgres
SELECT pg_promote();</code></pre>
<p class="wp-block-paragraph">Here, we&nbsp;will also use the&nbsp;LSN from&nbsp;the&nbsp;PgSQL v13 and&nbsp;advance the&nbsp;slot via <code>pg_replication_slot_advance</code>:</p>
<pre class="wp-block-code bash"><code>cat /var/log/postgresql/postgresql-13-main.log | grep "redo done at"</code></pre>
<p class="wp-block-paragraph">We&#8217;ll proceed on&nbsp;the&nbsp;<em>master</em> with the&nbsp;given LSN and&nbsp;drop the&nbsp;old streaming replication slot:</p>
<pre class="wp-block-code"><code>\c our_db
SELECT pg_replication_slot_advance('logical_replica_slot', 'F2E12/8D7CC732');
SELECT pg_drop_replication_slot('repmgr_slot_5');</code></pre>
<p class="wp-block-paragraph">Then, we&#8217;ll come back to&nbsp;the&nbsp;<em>replica</em> to&nbsp;install PostgreSQL v16 and&nbsp;check if&nbsp;it&nbsp;was successful:</p>
<pre class="wp-block-code bash"><code>apt-get install -y postgresql-16 postgresql-16-repack postgresql-16-repmgr postgresql-client-16
pg_lsclusters</code></pre>
<p class="wp-block-paragraph">We&#8217;re all set to&nbsp;prepare the&nbsp;old instance on&nbsp;our <em>replica</em>:</p>
<pre class="wp-block-code bash"><code>psql -U postgres -p 5432 &lt;&lt; EOF
DROP DATABASE pghero;
\connect our_db
DROP EXTENSION pg_repack CASCADE;
DROP EXTENSION pg_stat_statements CASCADE;
DROP SCHEMA pghero CASCADE;
DROP SCHEMA repack CASCADE;
DROP SCHEMA repmgr CASCADE;
\connect postgres
DROP EXTENSION pg_repack CASCADE;
DROP EXTENSION pg_stat_statements CASCADE;
DROP SCHEMA pghero CASCADE;
DROP SCHEMA repack CASCADE;
DROP SCHEMA repmgr CASCADE;
EOF</code></pre>
<p class="wp-block-paragraph">Now, it&#8217;s time to&nbsp;stop PostgreSQL on&nbsp;the&nbsp;<em>replica</em>, log in&nbsp;as the&nbsp;PostgreSQL user and&nbsp;perform the&nbsp;upgrade:</p>
<pre class="wp-block-code bash"><code>systemctl stop postgresql
su postgres
/usr/lib/postgresql/16/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/13/main \
--new-datadir=/var/lib/postgresql/16/main \
--old-bindir=/usr/lib/postgresql/13/bin \
--new-bindir=/usr/lib/postgresql/16/bin \
--old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf' \
--check
/usr/lib/postgresql/16/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/13/main \
--new-datadir=/var/lib/postgresql/16/main \
--old-bindir=/usr/lib/postgresql/13/bin \
--new-bindir=/usr/lib/postgresql/16/bin \
--old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf' \
--link
exit</code></pre>
<p class="wp-block-paragraph">On&nbsp;the&nbsp;<em>replica</em>, edit the&nbsp;config files for&nbsp;v16 and&nbsp;v13:</p>
<pre class="wp-block-code bash"><code>rsync -av /etc/postgresql/13/main/ /etc/postgresql/16/main/
sed -i '/stats_temp_directory/d' /etc/postgresql/16/main/postgresql.conf
sed -i '/vacuum_defer_cleanup_age/d' /etc/postgresql/16/main/postgresql.conf
sed -i 's/pg_stat_statements,pg_repack/pg_stat_statements/' /etc/postgresql/16/main/postgresql.conf
sed -i 's/\/13\//\/16\//' /etc/postgresql/16/main/postgresql.conf
sed -i 's/^port = 5433/port = 5432/' /etc/postgresql/16/main/postgresql.conf
sed -i 's/13-main/16-main/' /etc/postgresql/16/main/postgresql.conf
sed -i 's/13\/main/16\/main/' /etc/postgresql/16/main/postgresql.conf
sed -i 's/^port = 5432/port = 5433/' /etc/postgresql/13/main/postgresql.conf</code></pre>
<p class="wp-block-paragraph">… and&nbsp;start the&nbsp;PostgreSQL service, followed by the&nbsp;maintenance operations:</p>
<pre class="wp-block-code"><code>systemctl start postgresql
su postgres
/usr/lib/postgresql/16/bin/vacuumdb --all --analyze-in-stages
./delete_old_cluster.sh
rm -rf /etc/postgresql/13/main
exit</code></pre>
<p class="wp-block-paragraph">Our final touch on&nbsp;the&nbsp;<em>replica</em> is:</p>
<pre class="wp-block-code"><code>\c our_db
CREATE SUBSCRIPTION our_db_sub CONNECTION 'host=a.b.c.d dbname=our_db' PUBLICATION our_db_pub WITH (copy_data=false, slot_name='logical_replica_slot', create_slot=false);</code></pre>
<p class="wp-block-paragraph">So we&nbsp;set up a&nbsp;streaming replica and&nbsp;waited for&nbsp;it&nbsp;to&nbsp;synchronize with the&nbsp;main database. Next, we&nbsp;created a&nbsp;logical replication slot and&nbsp;a&nbsp;publication for&nbsp;the&nbsp;target database so that data could be&nbsp;transferred. Then we&nbsp;promoted the&nbsp;replica and&nbsp;moved the&nbsp;logical slot to&nbsp;the&nbsp;LSN. In&nbsp;the&nbsp;end, we&nbsp;upgraded the&nbsp;replica, configured PostgreSQL version 16, and&nbsp;created a&nbsp;subscription on&nbsp;the&nbsp;replica.</p>
<p class="wp-block-paragraph">And&nbsp;this&nbsp;approach worked! Finally, <strong>we&nbsp;got a&nbsp;complete workflow for&nbsp;creating a&nbsp;logical replica on&nbsp;a&nbsp;new PostgreSQL instance</strong> from&nbsp;streaming replication.</p>
<h2 class="wp-block-heading">Transferring the&nbsp;master role to&nbsp;the&nbsp;new replica</h2>
<p class="wp-block-paragraph">The&nbsp;next part of the&nbsp;plan was simple: switching the&nbsp;master role over to&nbsp;the&nbsp;updated replica. Here&#8217;s what we&nbsp;will do:</p>
<ol class="wp-block-list">
<li>Execute query plans on&nbsp;the&nbsp;new logical replica to&nbsp;warm up the&nbsp;replica&#8217;s cache.</li>
<li>Set the&nbsp;master to&nbsp;a&nbsp;<code>read_only</code> state and&nbsp;await full synchronization with the&nbsp;replica.</li>
<li>Disable the&nbsp;update subscription on&nbsp;the&nbsp;replica to&nbsp;stop replication.</li>
<li>Configure the&nbsp;load balancers to&nbsp;route traffic to&nbsp;the&nbsp;replica.</li>
<li>Make sure requests are flowing correctly.</li>
<li>Delete the&nbsp;subscription.</li>
<li>Stop the&nbsp;PostgreSQL service on&nbsp;the&nbsp;master.</li>
<li>Upgrade the&nbsp;old master and&nbsp;get it&nbsp;running as a&nbsp;streaming replica of the&nbsp;new v16 master.</li>
</ol>
<p class="wp-block-paragraph">We&nbsp;will start switching the&nbsp;master to&nbsp;the&nbsp;new PostgreSQL from&nbsp;performing <code>VACUUM</code> on&nbsp;the&nbsp;<em>replica</em>:</p>
<pre class="wp-block-code bash"><code>vacuumdb --all --analyze-in-stages</code></pre>
<p class="wp-block-paragraph">Then, on&nbsp;the&nbsp;<em>master</em>, we&nbsp;execute:</p>
<pre class="wp-block-code"><code>CHECKPOINT;
ALTER SYSTEM SET default_transaction_read_only TO&nbsp;on;
SELECT pg_reload_conf();
SHOW default_transaction_read_only;</code></pre>
<p class="wp-block-paragraph">… and&nbsp;make sure <code>replay_lag</code> is&nbsp;0:</p>
<pre class="wp-block-code"><code>SELECT usename,client_addr,state,replay_lag FROM&nbsp;pg_stat_replication;</code></pre>
<p class="wp-block-paragraph">On&nbsp;the&nbsp;<em>replica</em>:</p>
<pre class="wp-block-code"><code>\c our_db
ALTER SUBSCRIPTION our_db_sub DISABLE;</code></pre>
<p class="wp-block-paragraph">Now, we&nbsp;need to&nbsp;update cluster load balancers to&nbsp;route traffic to&nbsp;the&nbsp;new master. When it&#8217;s done, we&nbsp;can perform a&nbsp;full PostgreSQL check by executing a&nbsp;rollback plan, involving the&nbsp;following commands:</p>
<ol class="wp-block-list">
<li>Executing on&nbsp;the&nbsp;<em>master</em>:</li>
</ol>
<pre class="wp-block-code"><code>ALTER SYSTEM SET default_transaction_read_only TO&nbsp;off;
SELECT pg_reload_conf();</code></pre>
<ol start="2" class="wp-block-list">
<li>Reverting the&nbsp;cluster load balancer to&nbsp;the&nbsp;old master&#8217;s address.</li>
<li>Executing on&nbsp;the&nbsp;<em>replica</em>:</li>
</ol>
<pre class="wp-block-code"><code>\c our_db
ALTER SUBSCRIPTION our_db_sub ENABLE;</code></pre>
<ol start="4" class="wp-block-list">
<li>Ok, let&#8217;s move further with the&nbsp;<em>replica</em>:</li>
</ol>
<pre class="wp-block-code"><code>\c our_db
DROP SUBSCRIPTION our_db_sub;</code></pre>
<ol start="5" class="wp-block-list">
<li>Our final actions on&nbsp;the&nbsp;<em>master</em>:</li>
</ol>
<pre class="wp-block-code"><code>\c our_db
DROP PUBLICATION our_db_pub;
SELECT pg_drop_replication_slot('repmgr_slot_5');
SELECT pg_drop_replication_slot('logical_replica_slot');
exit;
sudo systemctl stop postgresql</code></pre>
<p class="wp-block-paragraph">The&nbsp;plan played out as intended! The&nbsp;<strong>downtime of 10-15 seconds</strong> solely affected data writing operations. This&nbsp;brief outage was due to&nbsp;performing a&nbsp;checkpoint and&nbsp;switching traffic from&nbsp;one server to&nbsp;another.</p>
<p class="wp-block-paragraph">Now, we&nbsp;should note that deleting a&nbsp;subscription also deletes the&nbsp;logical slot. So we&nbsp;first disabled the&nbsp;slot to&nbsp;be&nbsp;able to&nbsp;roll back if&nbsp;necessary. Next, we&nbsp;had to&nbsp;update the&nbsp;<code>SEQUENCE</code>:</p>
<pre class="wp-block-code"><code>ALTER SEQUENCE id_seq RESTART WITH 1822319;</code></pre>
<p class="wp-block-paragraph">Why? Well, while most of the&nbsp;tables used a&nbsp;primary key in&nbsp;the&nbsp;UUID v4 format, some relied on&nbsp;an autoincrementing primary key that depended on&nbsp;<code>SEQUENCE</code>. In&nbsp;those tables, inserting new entries would fail because the&nbsp;<code>SEQUENCE</code> had not been migrated.</p>
<h2 class="wp-block-heading">Summary</h2>
<p class="wp-block-paragraph">We&nbsp;successfully upgraded our PostgreSQL cluster from&nbsp;version 13 to&nbsp;16 with minimal downtime while keeping it&nbsp;highly available. While there were some challenges, such as LSN management and&nbsp;subscription issues, we&nbsp;synchronised the&nbsp;data and&nbsp;completed the&nbsp;upgrade without any data loss. The&nbsp;key to&nbsp;our success was combining the&nbsp;transition to&nbsp;a&nbsp;logical replica with the&nbsp;version upgrade.</p>
<p class="wp-block-paragraph">It&nbsp;is&nbsp;worth noting that upgrading the&nbsp;PostgreSQL cluster was not merely a&nbsp;technical necessity but a&nbsp;strategic move. We&nbsp;took into account the&nbsp;growth in&nbsp;data and&nbsp;transactions that the&nbsp;old servers would soon no longer be&nbsp;able to&nbsp;handle. On&nbsp;top of that, the&nbsp;upgrade unlocked new features in&nbsp;PostgreSQL 16, which will streamline future development.</p>
</article>
</div>
</div>
<div class="content__wrapper">
<div class="content__column">
<section class="subscribe subscribe-blog">
<div class="container">
<img height="560" width="404" class="subscribe-blog__image"
src="https://palark.com/wp-content/themes/palark/assets/images/subscribe-blog.svg"
alt="pic">
<div class="subscribe-blog__content">
<div class="subscribe-blog__info">
<div class="subscribe-blog__title">Subscribe to our blog</div>
<div class="subscribe-blog__text">
<p>Get our new tech articles in a good old fashion!<br> We promise not to send anything besides
them.</p>
</div>
</div>
<div class="wpcf7 no-js" id="wpcf7-f4950-o1" lang="en-US" dir="ltr" data-wpcf7-id="4950">
<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
<form action="/blog/postgresql-upgrade-no-data-loss-downtime/#wpcf7-f4950-o1" method="post" class="wpcf7-form init palark-cf7 palark-subscribe-form wpcf7-acceptance-as-validation" id="contact-form" aria-label="Contact form" novalidate="novalidate" data-status="init">
<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="4950" /><input type="hidden" name="_wpcf7_version" value="6.1.7" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f4950-o1" /><input type="hidden" name="_wpcf7_container_post" value="0" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
</fieldset>
<div class="cf7-grid cf7-grid--subscribe">
<div class="cf7-row">
<span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email cf7-input" autocomplete="email" aria-required="true" aria-invalid="false" placeholder="Email" value="" type="email" name="your-email" /></span>
</div>
<div class="cf7-row cf7-row--consent">
<span class="wpcf7-form-control-wrap" data-name="consent"><span class="wpcf7-form-control wpcf7-acceptance"><span class="wpcf7-list-item"><label><input type="checkbox" name="consent" value="1" aria-invalid="false" /><span class="wpcf7-list-item-label">I consent to the <a href="/privacy-policy/" target="_blank">privacy policy</a></span></label></span></span></span>
</div>
<span id="wpcf7-6aa4f62c58ff0-wrapper" class="wpcf7-form-control-wrap cf7apps-honeypot-wrap honeypot-958-wrap" data-cf7apps-honeypot="honeypot-958" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"><input type="hidden" name="honeypot-958-random-hash" value="20260912"><input type="hidden" name="honeypot-958-time-token" value="MTc4OTE5NTgyMA==.57150113502289a754b5ba7cde3ecbc2d92d1fd6568dd00293db88510f8d3f44"><label
for="wpcf7-6aa4f62c58ff0-field"
class="hp-message"
>Please leave this field empty.</label><input
id="wpcf7-6aa4f62c58ff0-field"
class="wpcf7-form-control wpcf7-text"
type="text"
name="a38idwadz0wr"
value=""
autocomplete="new-password"
tabindex="1000"
data-cf7apps-tabindex="1000"
/></span>
<input class="wpcf7-form-control wpcf7-submit has-spinner button" type="submit" value="Sign me up" />
</div><div class="wpcf7-response-output" aria-hidden="true"></div>
</form>
</div>
</div>
</div>
</section>
<div class="content__share">
<h4>Share:</h4>
<div class="scriptlesssocialsharing"><div class="scriptlesssocialsharing__buttons"><a class="button linkedin" target="_blank" href="https://www.linkedin.com/feed/?shareActive=true&#038;text=Upgrading%20PostgreSQL%20with%20no%20data%20loss%20and%20minimal%20downtime%20https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F%20%23NewPost" title="LinkedIn" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon linkedin" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M6.227 12.61h4.19v13.48h-4.19zm2.095-6.7a2.43 2.43 0 0 1 0 4.86c-1.344 0-2.428-1.09-2.428-2.43s1.084-2.43 2.428-2.43m4.72 6.7h4.02v1.84h.058c.56-1.058 1.927-2.176 3.965-2.176 4.238 0 5.02 2.792 5.02 6.42v7.395h-4.183v-6.56c0-1.564-.03-3.574-2.178-3.574-2.18 0-2.514 1.7-2.514 3.46v6.668h-4.187z"></path></svg><span class="screen-reader-text">Share on LinkedIn</span></a><a class="button bluesky" target="_blank" href="https://bsky.app/intent/compose?text=Upgrading%20PostgreSQL%20with%20no%20data%20loss%20and%20minimal%20downtime%3A%20https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F" title="Bluesky" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon bluesky" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M16 14.903c-.996-1.928-3.709-5.521-6.231-7.293C7.353 5.912 6.43 6.206 5.827 6.478 5.127 6.793 5 7.861 5 8.49s.346 5.155.572 5.91c.747 2.496 3.404 3.34 5.851 3.07q.188-.029.38-.052a8 8 0 0 1-.38.051c-3.586.529-6.771 1.83-2.594 6.457 4.595 4.735 6.297-1.015 7.171-3.93.874 2.915 1.88 8.458 7.089 3.93 3.911-3.93 1.074-5.928-2.512-6.457a8 8 0 0 1-.38-.051q.192.024.38.051c2.447.271 5.104-.573 5.85-3.069.227-.755.573-5.281.573-5.91s-.127-1.697-.827-2.012c-.604-.271-1.526-.566-3.942 1.132-2.522 1.772-5.235 5.365-6.231 7.293"></path></svg><span class="screen-reader-text">Share on Bluesky</span></a><a class="button mastodon" target="_blank" href="https://share.joinmastodon.org/#text=Upgrading%20PostgreSQL%20with%20no%20data%20loss%20and%20minimal%20downtime%20https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F" title="Mastodon" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon mastodon" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M26.5 12.187c0-4.887-3.198-6.319-3.198-6.319-1.575-.782-4.39-1.097-7.302-1.116-2.864 0-5.65.334-7.264 1.069-.029 0-3.236 1.431-3.236 6.366v3.819c.115 4.772.878 9.478 5.288 10.652 1.69.46 3.443.653 5.193.573a10.4 10.4 0 0 0 3.99-.907l-.086-1.861a12.8 12.8 0 0 1-3.885.515c-2.024-.067-4.171-.22-4.496-2.71a5 5 0 0 1-.048-.698c1.485.332 2.996.533 4.515.602a25.6 25.6 0 0 0 4.468-.267c2.863-.335 5.278-2.072 5.584-3.656a37.5 37.5 0 0 0 .477-6.062m-3.77 6.29h-2.35v-5.726c0-1.213-.506-1.824-1.527-1.824s-1.69.726-1.69 2.167v3.14h-2.329v-3.197c0-1.441-.563-2.167-1.69-2.167-1.125 0-1.526.611-1.526 1.823v5.728h-2.3v-5.9a4.28 4.28 0 0 1 .954-2.863 3.24 3.24 0 0 1 2.51-1.07 3.03 3.03 0 0 1 2.711 1.375l.582.955.583-.955a3.03 3.03 0 0 1 2.71-1.374 3.24 3.24 0 0 1 2.51 1.069c.656.807.995 1.825.955 2.864l-.105 5.956Z"></path></svg><span class="screen-reader-text">Share on Mastodon</span></a><a class="button facebook" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F" title="Facebook" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon facebook" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M28 16c0-6.627-5.373-12-12-12S4 9.373 4 16c0 5.628 3.875 10.35 9.101 11.647v-7.98h-2.474V16H13.1v-1.58c0-4.085 1.849-5.978 5.859-5.978.76 0 2.072.15 2.608.298v3.325c-.283-.03-.775-.045-1.386-.045-1.967 0-2.728.745-2.728 2.683V16h3.92l-.673 3.667h-3.247v8.245C23.395 27.195 28 22.135 28 16"></path></svg><span class="screen-reader-text">Share on Facebook</span></a><a class="button reddit" target="_blank" href="https://www.reddit.com/submit?url=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F" title="Reddit" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon reddit" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M28.543 15.774a2.953 2.953 0 0 0-2.951-2.949 2.88 2.88 0 0 0-1.9.713 14.1 14.1 0 0 0-6.85-2.044l1.38-4.349 3.768.884a2.452 2.452 0 1 0 .24-1.176l-4.274-1a.6.6 0 0 0-.709.4l-1.659 5.224a14.3 14.3 0 0 0-7.316 2.029 2.9 2.9 0 0 0-1.872-.681 2.942 2.942 0 0 0-1.618 5.4 5 5 0 0 0-.062.765c0 4.158 5.037 7.541 11.229 7.541s11.22-3.383 11.22-7.541a5 5 0 0 0-.053-.706 2.96 2.96 0 0 0 1.427-2.51m-18.008 1.88a1.753 1.753 0 0 1 1.73-1.74 1.73 1.73 0 0 1 1.709 1.74 1.71 1.71 0 0 1-1.709 1.711 1.733 1.733 0 0 1-1.73-1.711m9.565 4.968a5.57 5.57 0 0 1-4.081 1.272h-.032a5.58 5.58 0 0 1-4.087-1.272.6.6 0 0 1 .844-.854 4.5 4.5 0 0 0 3.238.927h.032a4.5 4.5 0 0 0 3.237-.927.6.6 0 1 1 .844.854zm-.331-3.256a1.726 1.726 0 1 1 1.709-1.712 1.717 1.717 0 0 1-1.712 1.712z"></path></svg><span class="screen-reader-text">Share on Reddit</span></a><a class="button twitter" target="_blank" href="https://twitter.com/intent/tweet?text=Upgrading%20PostgreSQL%20with%20no%20data%20loss%20and%20minimal%20downtime&#038;url=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F" title="X (Twitter)" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon twitter" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M28 8.557a10 10 0 0 1-2.828.775 4.93 4.93 0 0 0 2.166-2.725 9.7 9.7 0 0 1-3.13 1.194 4.92 4.92 0 0 0-3.593-1.55 4.924 4.924 0 0 0-4.794 6.049c-4.09-.21-7.72-2.17-10.15-5.15a4.94 4.94 0 0 0-.665 2.477c0 1.71.87 3.214 2.19 4.1a5 5 0 0 1-2.23-.616v.06c0 2.39 1.7 4.38 3.952 4.83-.414.115-.85.174-1.297.174q-.476-.001-.928-.086a4.935 4.935 0 0 0 4.6 3.42 9.9 9.9 0 0 1-6.114 2.107q-.597 0-1.175-.068a13.95 13.95 0 0 0 7.55 2.213c9.056 0 14.01-7.507 14.01-14.013q0-.32-.015-.637c.96-.695 1.795-1.56 2.455-2.55z"></path></svg><span class="screen-reader-text">Share on X (Twitter)</span></a><a class="button telegram" target="_blank" href="https://telegram.me/share/url?url=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F&#038;text=Upgrading%20PostgreSQL%20with%20no%20data%20loss%20and%20minimal%20downtime" title="Telegram" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon telegram" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M25.515 6.896 6.027 14.41c-1.33.534-1.322 1.276-.243 1.606l5 1.56 1.72 5.66c.226.625.115.873.77.873.506 0 .73-.235 1.012-.51l2.43-2.363 5.056 3.734c.93.514 1.602.25 1.834-.863l3.32-15.638c.338-1.363-.52-1.98-1.41-1.577z"></path></svg><span class="screen-reader-text">Share on Telegram</span></a></div></div> </div>
<div class="content__comments">
<div id="comments">
<h2 class="comments-title">Comments <span></span></h2>
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/postgresql-upgrade-no-data-loss-downtime/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://palark.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"> <!-- OneAll.com / Social Login for WordPress / v5.10.0 -->
<div class="oneall_social_login">
<div class="oneall_social_login_label" style="margin-bottom: 3px;"><label>Connect with:</label></div>
<div class="oneall_social_login_providers" id="oneall_social_login_providers_784382"></div>
<script data-cfasync="false" type="text/javascript">
var _oneall = _oneall || [];
_oneall.push(['social_login', 'set_providers', ['facebook','github','google','linkedin']]);
_oneall.push(['social_login', 'set_callback_uri', (window.location.href + ((window.location.href.split('?')[1] ? '&amp;': '?') + "oa_social_login_source=comments"))]);
_oneall.push(['social_login', 'set_custom_css_uri', 'https://secure.oneallcdn.com/css/api/socialize/themes/wordpress/modern.css']);
_oneall.push(['social_login', 'do_render_ui', 'oneall_social_login_providers_784382']);
</script>
</div><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><input id="author" name="author" type="text" placeholder="Name*" autocomplete="off" required/>
<input id="email" name="email" type="text" placeholder="Email*" autocomplete="off" required/>
<textarea autocomplete="new-password" id="gc932f35b5" name="gc932f35b5" rows="3" placeholder="Add a comment*" required></textarea><textarea id="comment" aria-label="hp-comment" aria-hidden="true" name="comment" autocomplete="new-password" style="padding:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;position:absolute !important;white-space:nowrap !important;height:1px !important;width:1px !important;overflow:hidden !important;" tabindex="-1"></textarea><script data-noptimize>document.getElementById("comment").setAttribute( "id", "add2f8131b7ff7ad00ea9a074fd0449d" );document.getElementById("gc932f35b5").setAttribute( "id", "comment" );</script><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit button" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='2802' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p></form> </div><!-- #respond -->
</div>
</div>
</div>
</div>
</div>
</div>
<section>
<div class="container">
<h2 class="upper"><span>Related</span> articles</h2>
<div class="content-grid content-grid--lined">
<article class="content mini">
<div class="content__info">
<div class="content__line">
<div class="content__date">4 August 2020</div>
</div>
<h3 class="content__title">
<a href="https://palark.com/blog/recent-troubleshooting-cases-from-our-sres-part-2/">Recent troubleshooting cases from our SREs, part 2</a>
</h3>
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/kubernetes/"
class="content__tags-item content__tags-item--main">
Kubernetes </a>
</li>
<li>
<a href="https://palark.com/blog/tag/databases/"
class="content__tags-item">
databases </a>
</li>
<li>
<a href="https://palark.com/blog/tag/postgresql/"
class="content__tags-item">
PostgreSQL </a>
</li>
</ul>
</div>
</article><article class="content mini">
<div class="content__info">
<div class="content__line">
<div class="content__date">18 February 2021</div>
</div>
<h3 class="content__title">
<a href="https://palark.com/blog/comparing-kubernetes-operators-for-postgresql/">Comparing Kubernetes operators for PostgreSQL</a>
</h3>
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/databases/"
class="content__tags-item content__tags-item--main">
databases </a>
</li>
<li>
<a href="https://palark.com/blog/tag/postgresql/"
class="content__tags-item">
PostgreSQL </a>
</li>
<li>
<a href="https://palark.com/blog/tag/kubernetes-operators/"
class="content__tags-item">
Kubernetes operators </a>
</li>
</ul>
</div>
</article><article class="content mini">
<div class="content__info">
<div class="content__line">
<div class="content__date">26 February 2021</div>
</div>
<h3 class="content__title">
<a href="https://palark.com/blog/our-experience-with-postgres-operator-for-kubernetes-by-zalando/">Our experience with Postgres Operator for Kubernetes by Zalando</a>
</h3>
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/kubernetes/"
class="content__tags-item content__tags-item--main">
Kubernetes </a>
</li>
<li>
<a href="https://palark.com/blog/tag/databases/"
class="content__tags-item">
databases </a>
</li>
<li>
<a href="https://palark.com/blog/tag/postgresql/"
class="content__tags-item">
PostgreSQL </a>
</li>
</ul>
</div>
</article> </div>
</div>
</section>
</main>
<footer class="footer">
<div class="content">
<div class="footer__content">
<div class="footer__logo">
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 18" fill="none"><path fill="#231F20" d="M87.77 3.18h-2.98v13.53h2.98V3.18ZM100 3.18h-3.68l-6.85 6.76 6.85 6.77H100l-6.85-6.77L100 3.18ZM31.33 12.68 23.4.5l-7.9 12.18h3.54l4.36-7.03 4.37 7.03h3.55ZM62.25 12.68 54.33.5l-7.9 12.18h3.54l4.36-7.03 4.36 7.03h3.56ZM80.14 16.71l-3.76-4.36a4.76 4.76 0 0 0-1.75-9.17h-9.22v13.53h2.98V5.91h6.25a2.01 2.01 0 1 1 0 4.03H71.2l-1.46 2.74h3.5l3.48 4.03h3.44ZM9.23 3.18H0v13.53h2.99V5.91h6.25a2.01 2.01 0 1 1 0 4.03H5.78l-1.46 2.74h4.92a4.75 4.75 0 0 0 0-9.5h-.01ZM37.78 13.98V3.18H34.8v13.53h8.8l1.76-2.73h-7.58Z"></path></svg> </div>
<div class="footer__info">
<p>Germany,
<br>Baden-Württemberg, Ulm</p>
<ul id="footer-nav-col-1" class="nav"><li id="menu-item-144" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-144"><a href="/privacy-policy/">Privacy policy</a></li>
<li id="menu-item-135" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-135"><a href="/impressum/">Imprint</a></li>
</ul><ul id="footer-nav-col-2" class="nav"><li id="menu-item-14" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14"><a href="tel:+4973114613240">+49 731 1461 3240</a></li>
<li id="menu-item-15" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-15"><a href="mailto:info@palark.com">info@palark.com</a></li>
</ul> </div>
<div class="footer__certificates">
<div class="footer__certificates-grid">
<img height="54" width="145" src="/wp-content/themes/palark/assets/images/certs/gdpr.svg"
loading="lazy" alt="gdpr">
<img height="55" width="209" src="/wp-content/themes/palark/assets/images/certs/cncf.svg"
loading="lazy" alt="cncf" style="max-width: 190px">
<a href="/news/palark-best-devops-company-goodfirms-2025/" title="Palark is the Best Company to Work With">
<img height="144" width="288" src="/wp-content/themes/palark/assets/images/certs/good-firms.svg"
loading="lazy" alt="good-firms" style="max-height: 54px">
</a>
<div class="clutch-local-widget">
<div class="content">
<a class="logotype"
href="https://clutch.co/profile/palark?utm_source=widget&utm_medium=1&utm_campaign=widget&utm_content=logo&utm_term=palark.com"
target="_blank"
rel="nofollow"
data-ga-action="logo_click">
</a>
<div class="mini_widget_text">
<div class="mini_widget_stars">
<span class="rating">4.9</span>
<div class="reviews-totals-stars">
<a href="https://clutch.co/profile/palark?utm_source=widget&utm_medium=1&utm_campaign=widget&utm_content=stars&utm_term=palark.com#reviews"
rel="nofollow"
target="_blank">
<div class="fivestar-static-item">
<div class="form-item form-type-item">
<div class="fivestar-widget-static fivestar-widget-static-vote clearfix">
<div class="fivestar">
<div class="star star-1 star-odd">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-2 star-even">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-3 star-odd">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-4 star-even">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-5 star-odd">
<span class="on" style="--width: 90%; width: var(--width);"></span>
</div>
</div>
</div>
</div>
</div>
</a>
</div>
<span class="reviews-count">
<a href="https://clutch.co/profile/palark?utm_source=widget&utm_medium=1&utm_campaign=widget&utm_content=num_reviews&utm_term=palark.com#reviews"
target="_blank"
rel="nofollow">
15 reviews
</a>
</span>
</div>
</div>
</div>
</div>
<a href="/news/palark-iso-27001-certified/" title="Palark is ISO 27001 certified">
<img height="158" width="333" src="/wp-content/themes/palark/assets/images/certs/iso.png"
loading="lazy" alt="iso">
</a>
<a href="/news/palark-kubernetes-certified-service-provider/">
<img height="104" width="110" src="/wp-content/themes/palark/assets/images/certs/k8s.svg"
loading="lazy" alt="k8s" title="Kubernetes Certified Service Provider (KCSP)" style="grid-column: 2">
</a>
<img height="147" width="169" src="/wp-content/themes/palark/assets/images/certs/lf.png"
loading="lazy" alt="linux-foundation">
</div>
</div>
</div>
<div class="footer__bottom">
<div class="footer__back-up" onclick="window.scrollTo(0,0)">Back up</div>
<div class="footer__copyright">© 2022–2026 Palark
GmbH. All rights reserved. </div>
<div class="social-links">
<a href="https://www.linkedin.com/company/palark/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" fill="none">
<path fill="currentColor" fill-rule="evenodd"
d="M1.35 0C.6044 0 0 .6044 0 1.35v27.3C0 29.3956.6044 30 1.35 30h27.3c.7456 0 1.35-.6044 1.35-1.35V1.35C30 .6044 29.3956 0 28.65 0H1.35Zm5.3167 9.2832c1.428 0 2.5857-1.1577 2.5857-2.5857 0-1.428-1.1577-2.5857-2.5857-2.5857-1.428 0-2.5856 1.1577-2.5856 2.5857 0 1.428 1.1576 2.5857 2.5856 2.5857Zm-2.2121 1.9946h4.4548v14.2368H4.4546V11.2778Zm11.6976 14.2357-4.4701-.0006V11.2761H15.95v1.9472c.5713-.8049 1.8351-2.3515 4.4389-2.3515 1.1886 0 3.1027.3427 4.1433 1.8692.9126 1.3386.9969 3.1308.9969 4.2835v8.489h-4.4237v-7.7881c0-2.8162-1.7912-3.0686-2.7725-2.9128-.475.0754-.9855.2232-1.4019.6698-.4439.4762-.7788 1.3084-.7788 2.243v7.7881Z"
clip-rule="evenodd"></path>
</svg>
</a>
<a href="https://bsky.app/profile/palark.com" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 57" fill="none">
<path d="M13.873 3.805C21.21 9.332 29.103 20.537 32 26.55v15.882c0-.338-.13.044-.41.867-1.512 4.456-7.418 21.847-20.923 7.944-7.111-7.32-3.819-14.64 9.125-16.85-7.405 1.264-15.73-.825-18.014-9.015C1.12 23.022 0 8.51 0 6.55 0-3.268 8.579-.182 13.873 3.805ZM50.127 3.805C42.79 9.332 34.897 20.537 32 26.55v15.882c0-.338.13.044.41.867 1.512 4.456 7.418 21.847 20.923 7.944 7.111-7.32 3.819-14.64-9.125-16.85 7.405 1.264 15.73-.825 18.014-9.015C62.88 23.022 64 8.51 64 6.55c0-9.818-8.578-6.732-13.873-2.745Z"
fill="currentColor"></path>
</svg>
</a>
<a href="https://www.facebook.com/palarkcom/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" fill="none">
<path fill="currentColor"
d="M30 15a15 15 0 1 0-17.34 14.82V19.34H8.85V15h3.8v-3.3c0-3.76 2.25-5.84 5.67-5.84 1.64 0 3.36.3 3.36.3v3.68h-1.9c-1.86 0-2.44 1.16-2.44 2.35V15h4.16l-.66 4.34h-3.5v10.48A15 15 0 0 0 30 15Z"></path>
</svg>
</a>
<a href="https://www.youtube.com/@palark" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="31" height="20" viewBox="0 0 31 20" fill="none">
<path d="M24.9903 0.204701C20.5505 -0.0682335 10.6618 -0.0682335 6.23314 0.204701C1.43453 0.497852 0.862737 3.116 0.829102 10C0.862737 16.8739 1.42332 19.492 6.23314 19.7953C10.673 20.0682 20.5505 20.0682 24.9903 19.7953C29.7889 19.5021 30.3607 16.884 30.3943 10C30.3607 3.12611 29.8001 0.497852 24.9903 0.204701ZM11.9175 14.4377V5.55219L21.7725 9.98989L11.9175 14.4377Z"
fill="currentColor"></path>
</svg>
</a>
<a href="https://github.com/palark" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
<path d="M10.3945 0C4.89453 0 0.394531 4.6123 0.394531 10.2495C0.394531 14.7764 3.22786 18.62 7.22786 19.9866C7.72786 20.072 7.89453 19.7304 7.89453 19.4741V17.5951C5.14453 18.193 4.5612 16.3993 4.5612 16.3993C4.14453 15.2035 3.47786 14.8618 3.47786 14.8618C2.5612 14.264 3.5612 14.264 3.5612 14.264C4.5612 14.3494 5.0612 15.2889 5.0612 15.2889C5.97786 16.8263 7.39453 16.3993 7.97786 16.143C8.0612 15.4597 8.3112 15.0327 8.64453 14.7764C6.3112 14.5202 3.97786 13.6661 3.97786 9.73707C3.97786 8.6267 4.39453 7.68716 4.97786 7.00386C4.97786 6.74762 4.5612 5.63725 5.14453 4.27065C5.14453 4.27065 5.97786 4.01441 7.89453 5.2956C8.72786 5.03936 9.5612 4.95395 10.3945 4.95395C11.2279 4.95395 12.0612 5.03936 12.8945 5.2956C14.8112 4.01441 15.6445 4.27065 15.6445 4.27065C16.2279 5.72267 15.8112 6.74762 15.7279 7.00386C16.3945 7.68716 16.7279 8.6267 16.7279 9.73707C16.7279 13.6661 14.3945 14.5202 12.1445 14.7764C12.4779 15.1181 12.8112 15.716 12.8112 16.6555V19.4741C12.8112 19.7304 12.9779 20.072 13.4779 19.9866C17.5612 18.62 20.3945 14.7764 20.3945 10.2495C20.3945 4.6123 15.8945 0 10.3945 0Z"
fill="currentColor"></path>
</svg>
</a>
</div> </div>
</div>
</footer>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/palark/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0" height="0" style="position:absolute">
<symbol id="envelope" viewBox="0 0 512 512">
<path d="M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"></path>
</symbol>
<symbol id="envelope-square" viewBox="0 0 448 512">
<path d="M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"></path>
</symbol>
<symbol id="facebook" viewBox="0 0 512 512">
<path d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z"></path>
</symbol>
<symbol id="facebook-f" viewBox="0 0 320 512">
<path d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path>
</symbol>
<symbol id="facebook-square" viewBox="0 0 448 512">
<path d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z"></path>
</symbol>
<symbol id="get-pocket" viewBox="0 0 448 512">
<path d="M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z"></path>
</symbol>
<symbol id="hatena" viewBox="0 0 853 711">
<path d="M344.709 564.734c-18.912 11.616-51.503 17.322-97.231 17.322h-67.65V426.887H250.4c46.963 0 79.422 5.907 96.687 17.707 17.547 11.806 26.179 32.653 26.179 62.578 0 26.781-9.46 46.015-28.557 57.562zM179.828 157.453h41.569c48.041 0 80.316 5.425 96.972 16.216 16.437 10.856 24.815 29.578 24.815 56.262 0 25.669-8.918 43.753-26.562 54.356-17.866 10.407-50.453 15.675-98.147 15.675h-38.647V157.453zm334.328 222.981c-28.306-31.634-67.65-49.409-118.14-53.25 44.906-12.243 77.521-30.143 98.15-54.068 20.531-23.607 30.715-55.654 30.715-95.985 0-31.925-6.978-60.172-20.5-84.569-13.862-24.246-33.794-43.665-59.972-58.193-22.912-12.6-50.134-21.485-81.868-26.725C330.65 2.566 274.831 0 194.741 0H0v710.225h200.644c80.597 0 138.731-2.822 174.272-8.222 35.506-5.581 65.303-14.975 89.421-27.853 29.829-15.744 52.579-38.144 68.479-66.925 15.993-28.875 23.925-62.169 23.925-100.247 0-52.669-14.188-95-42.585-126.544zM762.328 530.303c-49.709 0-89.978 40.241-89.978 89.947s40.269 89.975 89.978 89.975c49.644 0 89.947-40.269 89.947-89.975 0-49.706-40.303-89.947-89.947-89.947zM684.187 0h156.25v473.484h-156.25z"></path>
</symbol>
<symbol id="linkedin" viewBox="0 0 448 512">
<path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path>
</symbol>
<symbol id="linkedin-in" viewBox="0 0 448 512">
<path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path>
</symbol>
<symbol id="pinterest" viewBox="0 0 496 512">
<path d="M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"></path>
</symbol>
<symbol id="pinterest-p" viewBox="0 0 384 512">
<path d="M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z"></path>
</symbol>
<symbol id="pinterest-square" viewBox="0 0 448 512">
<path d="M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"></path>
</symbol>
<symbol id="reddit" viewBox="0 0 512 512">
<path d="M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"></path>
</symbol>
<symbol id="reddit-alien" viewBox="0 0 512 512">
<path d="M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"></path>
</symbol>
<symbol id="reddit-square" viewBox="0 0 448 512">
<path d="M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z"></path>
</symbol>
<symbol id="sms" viewBox="0 0 512 512">
<path d="M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z"></path>
</symbol>
<symbol id="square-x-twitter" viewBox="0 0 448 512">
<path d="M64 32C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396h-95.6L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5 78.2-89.5h47.5zm-37.8 251.6L153.4 142.9h-28.3l171.8 224.7h26.3z"></path>
</symbol>
<symbol id="telegram" viewBox="0 0 496 512">
<path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z"></path>
</symbol>
<symbol id="telegram-plane" viewBox="0 0 448 512">
<path d="M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"></path>
</symbol>
<symbol id="twitter" viewBox="0 0 512 512">
<path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</symbol>
<symbol id="twitter-square" viewBox="0 0 448 512">
<path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"></path>
</symbol>
<symbol id="whatsapp" viewBox="0 0 448 512">
<path d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"></path>
</symbol>
<symbol id="whatsapp-square" viewBox="0 0 448 512">
<path d="M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z"></path>
</symbol>
<symbol id="x-twitter" viewBox="0 0 512 512">
<path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9L389.2 48zm-24.8 373.8h39.1L151.1 88h-42l255.3 333.8z"></path>
</symbol>
</svg>
<script id="wp-hooks-js" src="/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
<script id="wp-i18n-js" src="/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
<script id="wp-i18n-js-after">
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
</script>
<script id="swv-js" defer src="/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.7"></script>
<script id="contact-form-7-js-translations">
( function( domain, translations ) {
var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
localeData[""].domain = domain;
wp.i18n.setLocaleData( localeData, domain );
} )( "contact-form-7", {"translation-revision-date":"2026-05-05 18:32:38+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_GB"},"This contact form is placed in the wrong place.":["This contact form is placed in the wrong place."],"Error:":["Error:"]}},"comment":{"reference":"includes\/js\/index.js"}} );
//# sourceURL=contact-form-7-js-translations
</script>
<script id="contact-form-7-js-before">
var wpcf7 = {
"api": {
"root": "https:\/\/palark.com\/wp-json\/",
"namespace": "contact-form-7\/v1"
}
};
//# sourceURL=contact-form-7-js-before
</script>
<script id="contact-form-7-js" defer src="/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.7"></script>
<script id="cf7apps-honeypot-refill-js-extra">
var cf7appsHoneypotRefill = {"forceRefillOnInit":""};
//# sourceURL=cf7apps-honeypot-refill-js-extra
</script>
<script id="cf7apps-honeypot-refill-js" defer src="/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/js/honeypot-refill.js?ver=3.7.1"></script>
<script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="/wp-includes/js/comment-reply.min.js?ver=7.1"></script>
<script id="lazyload-video-js-js" defer src="/wp-content/plugins/lazy-load-for-videos/public/js/lazyload-shared.js?ver=2.18.11"></script>
<script id="lazyload-youtube-js-js-before">
window.llvConfig=window.llvConfig||{};window.llvConfig.youtube={"colour":"red","buttonstyle":"none","controls":true,"loadpolicy":true,"thumbnailquality":"0","preroll":"","postroll":"","overlaytext":"<strong>Please accept YouTube cookies to play this video.<\/strong> By accepting you will be accessing content from YouTube, a service provided by an external third party.<br><br><a href=\"https:\/\/policies.google.com\/privacy\" target=\"_blank\" rel=\"noopener noreferrer\">YouTube privacy policy<\/a><br><br>If you accept this notice, your choice will be saved and the page will refresh.<br><br><span class=\"youtube-consent-button\">Accept YouTube Content <span aria-hidden=\"true\">&#10004;<\/span><\/span>","loadthumbnail":false,"cookies":false,"callback":"<!--YOUTUBE_CALLBACK-->"};
//# sourceURL=lazyload-youtube-js-js-before
</script>
<script id="lazyload-youtube-js-js" defer src="/wp-content/plugins/lazy-load-for-videos/public/js/lazyload-youtube.js?ver=2.18.11"></script>
<script id="lazyload-vimeo-js-js-before">
window.llvConfig=window.llvConfig||{};window.llvConfig.vimeo={"buttonstyle":"","playercolour":"","preroll":"","postroll":"","show_title":false,"overlaytext":"","loadthumbnail":true,"thumbnailquality":false,"cookies":false,"callback":"<!--VIMEO_CALLBACK-->"};
//# sourceURL=lazyload-vimeo-js-js-before
</script>
<script id="lazyload-vimeo-js-js" defer src="/wp-content/plugins/lazy-load-for-videos/public/js/lazyload-vimeo.js?ver=2.18.11"></script>
<script id="googlesitekit-events-provider-contact-form-7-js" defer src="/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-0310812e6aa65ef3c958.js"></script>
<script id="googlesitekit-events-provider-content-events-js-before">
window._googlesitekit = window._googlesitekit || {};
window._googlesitekit.contentEvents = {"postID":2802,"isSinglePost":true};
//# sourceURL=googlesitekit-events-provider-content-events-js-before
</script>
<script id="googlesitekit-events-provider-content-events-js" defer src="/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-content-events-33078016c5e1e9f07c35.js"></script>
<!-- Start cookieyes banner --> <script defer id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/2e50d88887eb6e7903fcace8/script.js"></script> <!-- End cookieyes banner -->
<!-- Matomo Tag Manager -->
<script>
var _mtm = window._mtm = window._mtm || [];
_mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
(function() {
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='https://cdn.matomo.cloud/palark.matomo.cloud/container_vEVxopwf.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Tag Manager --></body>
</html>