1709 lines
169 KiB
HTML
1709 lines
169 KiB
HTML
<!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&redirect=https%3A%2F%2Fpalark.com%2Fblog%2Fpostgresql-upgrade-no-data-loss-downtime%2F&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 & 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&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 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 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 & 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 & 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&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&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 had to upgrade a heavily loaded PostgreSQL cluster from version 13 to 16 while keeping downtime minimal. The cluster, consisting of a master and a replica, was handling over 20,000 transactions per second. The process of upgrading PostgreSQL to a newer version also helped resolve several performance and maintenance issues.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Particularly, as the system’s load grew, the existing servers became a bottleneck. They had to be replaced with more powerful machines with larger disk volumes. This was necessary to handle the increasing amount of data while keeping high transaction processing speeds.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">On top of that, upgrading to a newer version of PostgreSQL brought new features and enhancements to streamline application development and optimization. Version 13 is also approaching its end-of-life later this year, so the upgrade was essential to ensure we have access to the latest patches and updates.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">In this article, I’ll walk you through the upgrade process and show how to overcome the challenges we ran into along the way. In general, the procedure involved two main stages:</p>
|
||
|
||
|
||
|
||
<ul class="wp-block-list">
|
||
<li>First, we created a new PostgreSQL replica running the desired version via logical replication.</li>
|
||
|
||
|
||
|
||
<li>Next, we transferred the master role to the new replica.</li>
|
||
</ul>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Creating a new replica: Logical replication</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Our initial plan was to set up logical replication and test it for the existing database. Here’s what we did to achieve that.</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Migrate the PostgreSQL database and the schema of the 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 database publication on the master:</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>CREATE PUBLICATION our_pub FOR ALL TABLES;</code></pre>
|
||
|
||
|
||
|
||
<ol start="3" class="wp-block-list">
|
||
<li>Create a subscription on the 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 publication works on the master:</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>SELECT * FROM pg_catalog.pg_publication;</code></pre>
|
||
|
||
|
||
|
||
<ol start="5" class="wp-block-list">
|
||
<li>Check that the subscription works on the replica:</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>SELECT * FROM pg_stat_subscription;</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">By doing so, we got a replication rate of about 1 GB per minute. With a 3.5 TB database, the migration would take 2-3 days to fully synchronize. But while the database is migrating, the WALs for the replication slot would accumulate. Potentially, the space allotted for them could fill up, causing the master to crash.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Obviously, we don’t want that to happen, and so we decided to stop synchronization, coming up with another option. We decided to run physical replication first and then switch to logical one.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Physical and logical replication</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">The draft action plan was as follows:</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Create a physical replica.</li>
|
||
|
||
|
||
|
||
<li>Wait for the physical replica to get to the synchronization point.</li>
|
||
|
||
|
||
|
||
<li>Switch to logical replication.</li>
|
||
|
||
|
||
|
||
<li>Upgrade PostgreSQL to 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 rate of WALs growth was not as high as we expected.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">But one thing still kept us on our toes: how would a logical replica figure out at what point in the LSN it should start working? Fortunately, this one is simple: when configuring logical replication, set the LSN for the slot to use as the starting point. Here is the command to 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 LSN value to advance a replication logical slot to? Once the replica is taken offline via <code>promote</code>, a line like this would appear in the PostgreSQL logs: <code>redo done at 0/3402801</code>. It contains information about the last applied transaction’s location. In this case, LSN equals <code>0/3402801</code>. Hence, transactions occurring after this point will be applied to the new instance.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Once we had figured out the process, we moved on to specific actions:</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Create a physical replica.</li>
|
||
|
||
|
||
|
||
<li>Stop it and promote the instance to autonomous mode.</li>
|
||
|
||
|
||
|
||
<li>Switch to logical replication.</li>
|
||
|
||
|
||
|
||
<li>Upgrade PostgreSQL to version 16.</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">First, we tested the PostgreSQL upgrade from version 13 to 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 the install user ok
|
||
Checking database connection settings ok
|
||
Checking for prepared transactions ok
|
||
Checking for system-defined composite types in user tables ok
|
||
Checking for reg* data types in user tables ok
|
||
Checking for contrib/isn with bigint-passing mismatch ok
|
||
Checking for incompatible "aclitem" data type in user tables ok
|
||
Checking for user-defined encoding conversions ok
|
||
Checking for user-defined postfix operators ok
|
||
Checking for incompatible polymorphic functions ok
|
||
Creating dump of global objects ok
|
||
Creating dump of database schemas ok
|
||
Checking for presence of required libraries ok
|
||
Checking database user is the install user ok
|
||
Checking for prepared transactions ok
|
||
Checking for new cluster tablespace directories ok
|
||
If pg_upgrade fails after this point, you must re-initdb the new cluster before continuing.
|
||
Performing Upgrade
|
||
Setting locale and encoding for new cluster ok
|
||
Analyzing all rows in the new cluster ok
|
||
Freezing all rows in the new cluster ok
|
||
Deleting files from new pg_xact ok
|
||
Copying old pg_xact to new server ok
|
||
Setting oldest XID for new cluster ok
|
||
Setting next transaction ID and epoch for new cluster ok
|
||
Deleting files from new pg_multixact/offsets ok
|
||
Copying old pg_multixact/offsets to new server ok
|
||
Deleting files from new pg_multixact/members ok
|
||
Copying old pg_multixact/members to new server ok
|
||
Setting next multixact ID and offset for new cluster ok
|
||
Resetting WAL archives ok
|
||
Setting frozenxid and minmxid counters in new cluster ok
|
||
Restoring global objects in the new cluster ok
|
||
Restoring database schemas in the new cluster ok
|
||
Adding ".old" suffix to old global/pg_control ok
|
||
If you want to start the old cluster, you will need to remove
|
||
the ".old" suffix from /var/lib/postgresql/13/main/global/pg_control.old.
|
||
Because "link" mode was used, the old cluster cannot be safely
|
||
started once the new cluster has been started.
|
||
Linking user relation files ok
|
||
Setting next OID for new cluster ok
|
||
Sync data directory to disk ok
|
||
Creating script to delete old cluster ok
|
||
Checking for extension updates notice
|
||
Your installation contains extensions that should be updated
|
||
with the ALTER EXTENSION command. The file
|
||
update_extensions.sql
|
||
when executed by psql by the database superuser will update
|
||
these extensions.
|
||
Upgrade Complete</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Next, we switched a physical replica to a logical one.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">On the <em>master</em>, we create the logical replication slot, check it and create a publication for all tables:</p>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>\c our_db
|
||
SELECT pg_create_logical_replication_slot('logical_replica_slot', 'pgoutput');
|
||
SELECT * from pg_replication_slots;
|
||
CREATE PUBLICATION our_db_pub FOR ALL TABLES;</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Then, on the <em>replica</em>, we promote it to a standalone one and look for the 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 the <em>master</em>, where we move the logical replication slot to the 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 create a subscription on the <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 are ready to upgrade it to version 16!</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Upgrading to PostgreSQL 16</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Here’s what we do to upgrade the PostgreSQL version:</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Install version 16. We’re using Ubuntu Linux, so it’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 installation has been successful, and stop PostgreSQL. At this point, the LSN is saved on the slot; the slot will later resume the publication from this 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 as the PostgreSQL user to perform the upgrade. But first, we’ll check if the upgrade is 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 old instance so that we avoid the errors occurring while creating views and other objects during data migration to the new instance:</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>pg_dump -s pghero > 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 actual upgrade by creating hard links to the file inodes and log out as the 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 the PostgreSQL instances. It might be also helpful to check these PostgreSQL configs for 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 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 as the PostgreSQL user again, update the optimizer stats (they are not carried over from the old instance), delete the old PgSQL v13 instance, and 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 disable and then enable the old subscription to the master database. If that doesn’t help, disable it and create a new one. <strong>Important: do NOT delete the old subscription</strong>, as this will delete the slot on the 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 new subscription if the 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 final checks on your PgSQL servers:</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<pre class="wp-block-code sql"><code>-- master
|
||
SELECT usename,client_addr,state,replay_lag FROM pg_stat_replication;
|
||
SELECT slot_name,slot_type,active FROM pg_replication_slots;
|
||
|
||
-- replica
|
||
SELECT * FROM pg_stat_subscription;</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">At this point, we encountered a problem: <strong>the number of records on the replica was different</strong> from the number of records on the master, i.e., the replica lacked some transactions that had occurred during the PostgreSQL upgrade. We suspected they had been lost while we were switching between subscriptions and looking for the right solution.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">We tried to restore the subscription with no success. So we ended up creating a new subscription alongside the old one. However, simply restarting an old subscription also failed for some reason. The charts and logs showed that the logical replica worker was running, but no data was actually being transferred.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Most likely, upgrading the version renewed the version of the <code>pgoutput</code> logical replication extension as well, which had broken the subscription. So that left us with one final option: <strong>create a physical replica</strong> and couple the change to the logical replica with a PgSQL version upgrade.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Combining logical replication with version upgrade</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">The plan was as follows:</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Stop the physical replica.</li>
|
||
|
||
|
||
|
||
<li>Save the LSN.</li>
|
||
|
||
|
||
|
||
<li>Move the logical slot on the master to that LSN.</li>
|
||
|
||
|
||
|
||
<li>Upgrade PgSQL to version 16.</li>
|
||
|
||
|
||
|
||
<li>Create a subscription to the master database on the upgraded PgSQL v16 replica.</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">We start from the <em>master</em>:</p>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>\c our_db
|
||
SELECT usename,client_addr,state,replay_lag FROM pg_stat_replication;
|
||
SELECT slot_name,slot_type,active FROM pg_replication_slots;
|
||
SELECT pg_create_logical_replication_slot('logical_replica_slot', 'pgoutput');
|
||
SELECT * FROM pg_replication_slots;
|
||
CREATE PUBLICATION our_db_pub FOR ALL TABLES;</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Then, we move on to the <em>replica</em>:</p>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>\c postgres
|
||
SELECT pg_promote();</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Here, we will also use the LSN from the PgSQL v13 and advance the 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’ll proceed on the <em>master</em> with the given LSN and drop the 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’ll come back to the <em>replica</em> to install PostgreSQL v16 and check if it 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’re all set to prepare the old instance on our <em>replica</em>:</p>
|
||
|
||
|
||
|
||
<pre class="wp-block-code bash"><code>psql -U postgres -p 5432 << 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’s time to stop PostgreSQL on the <em>replica</em>, log in as the PostgreSQL user and perform the 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 the <em>replica</em>, edit the config files for v16 and 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 start the PostgreSQL service, followed by the 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 the <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 set up a streaming replica and waited for it to synchronize with the main database. Next, we created a logical replication slot and a publication for the target database so that data could be transferred. Then we promoted the replica and moved the logical slot to the LSN. In the end, we upgraded the replica, configured PostgreSQL version 16, and created a subscription on the replica.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">And this approach worked! Finally, <strong>we got a complete workflow for creating a logical replica on a new PostgreSQL instance</strong> from streaming replication.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Transferring the master role to the new replica</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">The next part of the plan was simple: switching the master role over to the updated replica. Here’s what we will do:</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Execute query plans on the new logical replica to warm up the replica’s cache.</li>
|
||
|
||
|
||
|
||
<li>Set the master to a <code>read_only</code> state and await full synchronization with the replica.</li>
|
||
|
||
|
||
|
||
<li>Disable the update subscription on the replica to stop replication.</li>
|
||
|
||
|
||
|
||
<li>Configure the load balancers to route traffic to the replica.</li>
|
||
|
||
|
||
|
||
<li>Make sure requests are flowing correctly.</li>
|
||
|
||
|
||
|
||
<li>Delete the subscription.</li>
|
||
|
||
|
||
|
||
<li>Stop the PostgreSQL service on the master.</li>
|
||
|
||
|
||
|
||
<li>Upgrade the old master and get it running as a streaming replica of the new v16 master.</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">We will start switching the master to the new PostgreSQL from performing <code>VACUUM</code> on the <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 the <em>master</em>, we execute:</p>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>CHECKPOINT;
|
||
ALTER SYSTEM SET default_transaction_read_only TO on;
|
||
SELECT pg_reload_conf();
|
||
SHOW default_transaction_read_only;</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">… and make sure <code>replay_lag</code> is 0:</p>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>SELECT usename,client_addr,state,replay_lag FROM pg_stat_replication;</code></pre>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">On the <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 need to update cluster load balancers to route traffic to the new master. When it’s done, we can perform a full PostgreSQL check by executing a rollback plan, involving the following commands:</p>
|
||
|
||
|
||
|
||
<ol class="wp-block-list">
|
||
<li>Executing on the <em>master</em>:</li>
|
||
</ol>
|
||
|
||
|
||
|
||
<pre class="wp-block-code"><code>ALTER SYSTEM SET default_transaction_read_only TO off;
|
||
SELECT pg_reload_conf();</code></pre>
|
||
|
||
|
||
|
||
<ol start="2" class="wp-block-list">
|
||
<li>Reverting the cluster load balancer to the old master’s address.</li>
|
||
|
||
|
||
|
||
<li>Executing on the <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’s move further with the <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 the <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 plan played out as intended! The <strong>downtime of 10-15 seconds</strong> solely affected data writing operations. This brief outage was due to performing a checkpoint and switching traffic from one server to another.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Now, we should note that deleting a subscription also deletes the logical slot. So we first disabled the slot to be able to roll back if necessary. Next, we had to update the <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 tables used a primary key in the UUID v4 format, some relied on an autoincrementing primary key that depended on <code>SEQUENCE</code>. In those tables, inserting new entries would fail because the <code>SEQUENCE</code> had not been migrated.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Summary</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">We successfully upgraded our PostgreSQL cluster from version 13 to 16 with minimal downtime while keeping it highly available. While there were some challenges, such as LSN management and subscription issues, we synchronised the data and completed the upgrade without any data loss. The key to our success was combining the transition to a logical replica with the version upgrade.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">It is worth noting that upgrading the PostgreSQL cluster was not merely a technical necessity but a strategic move. We took into account the growth in data and transactions that the old servers would soon no longer be able to handle. On top of that, the upgrade unlocked new features in 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&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&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&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] ? '&': '?') + "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\">✔<\/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>
|