CINXE.COM

Postgres Tutorials | Crunchy Data

<!DOCTYPE html><html lang="en" class="h-full"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta property="og:url" content="https://www.crunchydata.com/developers/tutorials"/><meta property="og:site_name" content="Crunchy Data"/><meta name="twitter:site" content="@crunchydata"/><meta name="twitter:creator" content="@crunchydata"/><title>Postgres Tutorials | Crunchy Data</title><meta name="description" content="Learn Postgres using Crunchy Data&#x27;s Postgres Playground. The Postgres Playground is a postgres database instance running directly in your browser session."/><meta property="og:title" content="Postgres Tutorials | Crunchy Data"/><meta property="og:description" content="Learn Postgres using Crunchy Data&#x27;s Postgres Playground. The Postgres Playground is a postgres database instance running directly in your browser session."/><meta property="og:type" content="website"/><meta property="og:image:type" content="image/png"/><meta property="og:image" content="https://www.crunchydata.com/build/_assets/card-XNLWLAYT.png"/><meta property="og:image:secure_url" content="https://www.crunchydata.com/build/_assets/card-XNLWLAYT.png"/><meta property="og:image:height" content="1334"/><meta property="og:image:width" content="751"/><meta property="og:image:alt" content="Postgres terminal in the browser."/><meta name="twitter:card" content="summary_large_image"/><link rel="canonical" href="https://www.crunchydata.com/developers/tutorials"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/><link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&amp;display=swap" rel="preload" as="style"/><link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&amp;display=swap" rel="stylesheet"/><link rel="stylesheet" href="/build/_assets/app-2WZ6DH7F.css"/><link rel="stylesheet" href="/build/_assets/syntax-highlighting-SVOKP4VM.css"/></head><body class="h-full text-slate-900"><svg aria-hidden="true" width="0" height="0"><filter id="noise"><feTurbulence baseFrequency="0.60" result="colorNoise"></feTurbulence><feColorMatrix in="colorNoise" type="matrix" values=".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 0 0 0 0.5 0"></feColorMatrix><feComposite operator="in" in2="SourceGraphic" result="monoNoise"></feComposite><feBlend in="SourceGraphic" in2="monoNoise" mode="multiply"></feBlend></filter></svg><svg aria-hidden="true" width="0" height="0"><filter id="noise-spicy"><feTurbulence baseFrequency="0.60" result="colorNoise"></feTurbulence><feColorMatrix in="colorNoise" type="matrix" values=".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 0 0 0 1.0 0"></feColorMatrix><feComposite operator="in" in2="SourceGraphic" result="monoNoise"></feComposite><feBlend in="SourceGraphic" in2="monoNoise" mode="multiply"></feBlend></filter></svg><svg aria-hidden="true" width="0" height="0"><filter id="noise-mild"><feTurbulence baseFrequency="0.60" result="colorNoise"></feTurbulence><feColorMatrix in="colorNoise" type="matrix" values=".33 .33 .33 0 0 .33 .33 .33 0 0 .33 .33 .33 0 0 0 0 0 0.3 0"></feColorMatrix><feComposite operator="in" in2="SourceGraphic" result="monoNoise"></feComposite><feBlend in="SourceGraphic" in2="monoNoise" mode="multiply"></feBlend></filter></svg><svg aria-hidden="true" width="0" height="0"><defs><pattern id="dot-pattern-x" height="1" width="3" patternUnits="userSpaceOnUse"><rect width="1" height="1" class="fill-blue-950/30"></rect></pattern><pattern id="dot-pattern-y" width="1" height="3" patternUnits="userSpaceOnUse"><rect width="1" height="1" class="fill-blue-950/30"></rect></pattern></defs></svg><div class="h-full flex flex-col"><div class="motion-safe:invisible motion-safe:-translate-y-full bg-seafoam text-teal-950 font-medium text-[15px] px-4 py-2.5 flex items-center lg:justify-center gap-4"><div class="lg:ml-auto"><p><strong class="font-semibold">Introducing Crunchy Data Warehouse</strong>: A next-generation Postgres-native data warehouse. <a class="group/link inline-flex items-center font-semibold text-blue-700 hover:text-blue-900 transition-colors" href="/products/warehouse"><span class="sr-only">Crunchy Data Warehouse </span>Learn more<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="ml-0.5 group-hover/link:translate-x-1 transition-transform size-5 opacity-40 mt-0.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 7l5 5m0 0l-5 5m5-5H6"></path></svg></a></p></div><form method="post" action="/" class="flex items-center ml-auto"><button type="submit" name="closeGlobalBanner" value="on" class="p-1 hover:bg-teal-900/15 transition-colors rounded disabled:opacity-50"><span class="sr-only">Close</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="w-5 h-5"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button></form></div><nav class="dark bg-gray-900 border-b border-gray-700 text-white invert-color relative z-40" data-headlessui-state=""><div class="mx-auto flex h-16 max-w-7xl items-center justify-between gap-6 px-4 sm:px-6 lg:px-8"><a class="-mx-2 flex items-center p-2" aria-label="Home" href="/"><svg id="round-light_svg__Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 213 207.3" style="enable-background:new 0 0 213 207.3" xml:space="preserve" class="hidden lg:block h-8 w-auto xl:hidden"><style>.round-light_svg__st1{fill:#060606}.round-light_svg__st2{fill:#fff}</style><path class="round-light_svg__st1" d="M109.4 207.3c-48.9-.4-91.7-31.9-105.1-77.3C-12.2 74.1 20.1 17.6 77 3.7 120-6.8 156.9 5 186.1 37.6c33.8 37.7 35.4 90.5 6.6 128.6-17.5 23.1-40.9 36.4-69.6 40.1-3.5.5-7.1.7-10.6 1h-3.1zM101.5 5.2c-2.9 0-5.9-.1-8.8 0-1 0-2.8.3-2.1 1.8 1.3 2.5 2.7 5.1 4.8 6.9 1.6 1.3 4.1 0 6.1-.6l14.4-1.6h20.4c-6.7-3.5-13.9-4.7-21.1-5.2-4.6.4-9-1.9-13.7-1.3zM53.2 18.8c-11.6 5.9-20.8 14.8-28.5 25C11.6 61 5.5 80.9 5.9 102.5c.4 20.9 6.8 39.9 19.5 56.7 3.4 4.5 6.9 9 11.5 12.6.8-1.2.5-2.3.5-3.2-.5-5.8 1.5-10.8 4.9-15.3 1.3-1.6 2.5-3.2 3.9-4.8 1.6-1.9 1.8-2.8-1.1-3.7-11.6-3.7-20.9-10.6-26.8-21.6-.2-.5-.6-.9-1.1-1.1-5.3-2.3-6.6-6.7-6.1-12 1-10.3 4.1-20 6.8-29.9.6-2 1.8-3.8 3.5-5 2.9-2.1 4.6-4.9 5.8-8.3 1.6-4.6 4.8-6.7 9.7-6.7 2.4 0 4.8-.1 7.2 0 3.8.1 7.2-.6 9.9-3.6 2.4-.3 3.4-2.5 5.2-3.6 5.1-2.9 7.2-7.3 7.3-13.2.1-5.5 2.3-10.1 7.8-12.7 3-1.5 5.7-3.4 8.2-5.6 1.8-1.6 2.9-3.4 2.6-6-.5-3 .1-6.1 1.7-8.6-12.5 1.8-23.5 5.4-33.6 11.9zm44 63.8c5.7.1 9.9 2.6 13.7 5.9 7 6 8.8 22.6-1.5 28.2-9.2 5-18.7 8.1-29.3 7.2-4.9-.4-9.8-.9-14.7-1.4-12.1-1.2-24.1-3.4-36.3-1.6-2.8.4-3.6 1.1-1.7 3.4 7.5 9.3 17.1 14.5 29.3 13.8 12-.6 24-2.4 36-.2 13.6 2.5 24.1-1.7 31.5-13.5.9-1.5 2.1-3 4.1-1.8 2 1.2 1.3 2.8.2 4.4-6.3 9.9-14 17.6-26.9 17.3-2 0-4.1.4-6.2.6-1.9.2-3.6.8-4.7 2.5-2.4 3.6-5.1 7.1-6.7 11.2L71.4 191c-.9 2.3-.5 3.7 2.1 4.6 11.2 3.9 22.9 6 34.8 6.1 22.6.1 42.9-6.6 61-20.1 1.1-.8 1.7-1.6 1.2-2.8-3-7.8-.9-15.3 1.2-22.9 1.7-6.2 2.9-12.5 1.8-19-1.1-6.5-1-6.5-6.3-3.1-4.5 3-9.6 4.8-14.6 6.7-1.9.7-4.6 1-5.3-.7-1-2.4 2.1-2.4 3.5-3.1 4.1-2 8.8-3 12.4-5.9 9.4-7.6 13.9-18 15.5-29.7.8-5.3 1-10.7 1.5-16.1.1-1 .2-2.1 1.7-2.1s1.4 1.2 1.5 2.2c.1.8-.1 1.6 0 2.4.4 12.6-2.3 24.9-4.3 37.2-2 12.9-.6 25.6 2.2 38.2.4 1.6 1 3.5 2.3 3.9 1.8.6 2.5-1.6 3.4-2.8 9-11.6 14.7-24.7 17.7-39.1 2.3-11.1 2-21.7-3.8-32-4.1-7.3-7.7-14.8-11.7-22.2-8.2-15.3-19.9-28-30.8-41.2-3.3-4-7-7.9-11.8-10.4-.7-.3-1.4-1.1-2.2-.7-1.1.6-.4 1.7-.3 2.5 1.5 6-3.9 12.8-9.7 14.9-1.3.5-2.9 1.1-3.7-.4-.8-1.5 1-2 1.9-2.8 3.9-3.4 6.1-9 5.1-13.3-2.9 1.4-5.3 3.1-6.7 6-.6 1.3-1.5 3.7-3.1 2.8-1.9-1.1-.9-3.3.2-4.9.9-1.5 2.1-2.7 3.6-3.7s3.4-1.1 4.9-2.7c-1.6-.9-3.5-1.3-5.4-1.2-10.8.1-21.6-.1-32.3 2.1-3.4.6-6.8 1.4-9.5 3.8-3.8 3.5-8.1 6.5-12.6 8.8-1.9 1-3.8 2.1-3.1 4.7.6 2.4 2.6 3.6 5 3.9 1 .1 2.3-.2 2.6 1.2.3 1.2-1 1.7-1.7 2.3C72.7 47.8 66 53.3 59.4 59c-4.3 3.7-9.9 5.7-15.5 5.5-2.3-.1-4.6 0-6.9 0-5.4 0-6.6 1.6-5.1 6.8.5 1.9.7 3.9-1 5.4-1.7 1.5-3.5 1.4-5.3-.1-.9-.7-1.6-.4-2.3.5-1.6 1.9-1.3 3.4 1.2 4 4.4 1.2 7.7-1.1 10.8-3.9.6-.6 1.4-1.6 2.3-.9 1 .7.4 1.7-.1 2.5-1.9 3.7-9.4 7.7-13.6 7.2-1.1-.1-1.7 0-2 1.2-1.8 7.2-4.1 14.3-4.7 21.8-.6 7.6 1.2 9.1 8.7 7.4 12.4-2.9 24.6-3.7 37 .2 6.7 2.1 13.8 2.3 20.9 1.5 8.2-.9 16.4-2.3 23.2-7.5 2.7-1.9 4.3-4.8 4.6-8.1.5-4.9-1.8-8.4-5.1-11.5-3.1-3-6-5.5-9.3-8.4zM72.1 142v.1c-1.1-.1-2.3-.2-3.4-.2-5.3-.1-10.7-.5-14.8 3.9-5 5.4-8.9 11.4-10.2 18.7-2.2 11.5-.6 14.7 9.5 20.6l3.2 1.9c8.2 4.7 8.2 4.7 11.1-4.1 1.4-4.1.4-7-3.3-9.4-.9-.6-1.8-.9-2.7-1.4-.9-.5-1.6-1.1-1.5-2.1.1-.9.9-1.7 1.8-1.9 3.2-.4 6.4-1.5 9.5-.3 1.6.6 2.3.1 2.9-1.2 3.3-7.3 6.7-14.5 10.1-21.8.7-1.5.3-2-1.3-2.1-3.5-.2-7.2-.5-10.9-.7zm86.6-119c17.3 17.7 31.8 37.8 43.2 59.8 1.1-16.1-27.4-55.6-43.2-59.8z"></path><path class="round-light_svg__st2" d="M97.2 82.6c3.3 2.9 6.2 5.4 9.1 8.1 3.3 3.1 5.5 6.6 5.1 11.5-.2 3.2-1.9 6.2-4.6 8.1-6.9 5.2-15 6.7-23.2 7.5-7 .7-14.2.6-20.9-1.5-12.4-3.9-24.7-3.1-37-.2-7.6 1.8-9.3.3-8.7-7.4.6-7.5 2.9-14.6 4.7-21.8.3-1.2.9-1.3 2-1.2 4.2.5 11.6-3.4 13.6-7.2.4-.8 1-1.8.1-2.5s-1.7.3-2.3.9c-3 2.8-6.3 5.1-10.8 3.9-2.5-.6-2.8-2.1-1.2-4 .7-.9 1.4-1.2 2.3-.5 1.8 1.4 3.6 1.6 5.3.1 1.7-1.5 1.6-3.5 1-5.4-1.4-5.2-.3-6.8 5.1-6.8 2.3 0 4.6-.1 6.9 0 5.7.2 11.3-1.7 15.5-5.5 6.6-5.7 13.4-11.2 20.2-16.6.8-.6 2-1.1 1.7-2.3-.3-1.3-1.6-1-2.6-1.2-2.4-.3-4.3-1.5-5-3.9-.7-2.6 1.2-3.7 3.1-4.7 4.6-2.4 8.8-5.4 12.6-8.8 2.7-2.4 6.1-3.1 9.5-3.8 10.6-2.1 21.5-1.9 32.3-2.1 1.9-.1 3.7.3 5.4 1.2-1.5 1.5-3.4 1.7-4.9 2.7-1.4 1-2.6 2.2-3.6 3.7-1 1.6-2.1 3.8-.2 4.9 1.6.9 2.5-1.5 3.1-2.8 1.4-3 3.9-4.7 6.7-6 1 4.3-1.2 9.9-5.1 13.3-.9.8-2.7 1.3-1.9 2.8.8 1.5 2.4.8 3.7.4 5.8-2 11.2-8.8 9.7-14.9-.2-.8-.9-1.9.3-2.5.8-.4 1.5.4 2.2.7 4.8 2.5 8.4 6.4 11.8 10.4 10.9 13.3 22.6 26 30.8 41.2 4 7.4 7.6 14.9 11.7 22.2 5.8 10.3 6.1 20.9 3.8 32-3 14.4-8.7 27.5-17.7 39.1-.9 1.2-1.6 3.4-3.4 2.8-1.3-.4-2-2.3-2.3-3.9-2.8-12.6-4.2-25.3-2.2-38.2 1.9-12.3 4.7-24.6 4.3-37.2 0-.8.1-1.6 0-2.4-.1-1 0-2.2-1.5-2.2-1.6 0-1.6 1.1-1.7 2.1-.5 5.4-.7 10.8-1.5 16.1-1.7 11.7-6.1 22.1-15.5 29.7-3.6 2.9-8.3 3.8-12.4 5.9-1.5.7-4.5.7-3.5 3.1.7 1.8 3.5 1.4 5.3.7 5-1.9 10.1-3.7 14.6-6.7 5.3-3.5 5.2-3.5 6.3 3.1 1.1 6.5 0 12.8-1.8 19-2.1 7.6-4.2 15.1-1.2 22.9.5 1.3-.1 2-1.2 2.8-18 13.5-38.3 20.2-60.9 20.1-11.8-.1-23.6-2.1-34.8-6.1-2.6-.9-3-2.2-2.1-4.6 4.2-10.8 8.3-21.6 12.6-32.4 1.6-4.1 4.3-7.6 6.7-11.2 1.1-1.6 2.8-2.3 4.7-2.5 2.1-.2 4.1-.6 6.2-.6 12.9.3 20.6-7.4 26.9-17.3 1-1.6 1.7-3.2-.2-4.4-2-1.2-3.2.3-4.1 1.8-7.4 11.8-18 16-31.5 13.5-12-2.2-24-.4-36 .2-12.1.6-21.7-4.6-29.3-13.8-1.9-2.3-1.1-3 1.7-3.4 12.2-1.9 24.3.4 36.3 1.6 4.9.5 9.8.9 14.7 1.4 10.6 1 20.1-2.2 29.3-7.2 10.3-5.6 8.5-22.2 1.5-28.2-3.7-3-7.9-5.5-13.6-5.6zm14.6-42.2c-4.8-.1-11 3-13.9 6.7-.7.9-1 1.9-.4 2.8.6 1.1 1.6.5 2.4 0 1.2-.9 1.5.3 2.1.8 4 3.6 9.2 2.6 11.4-2.1.8-1.7.3-4 3-4.8.7-.2.4-1.6-.6-2.1-1.3-.8-2.6-1.2-4-1.3zM59.3 91.9c3-.5 5.7-1.4 7.4-4 .8-1.2.8-2.3-.1-3.4-1-1.1-1.8-1-3-.4-1.6.8-3.4 1.6-5.1 1.9-4.4.5-8.9 1.2-12.2-3-.7-.9-1.3-2.6-2.8-1.7-1.4.9.1 2.3.3 3.4.1.7.9 1.3 1.4 1.9 3.7 4.5 9.3 3.9 14.1 5.3zm-5.4-19.7c-2.2.3-4.5.4-4.8 3.3-.2 2.2 3.5 7.3 5.3 7.4 1.9.1 4.1-2.6 4-5.2-.1-3.1-2-5.5-4.5-5.5z"></path><path class="round-light_svg__st2" d="M72.1 142c3.7.3 7.3.6 11 .8 1.6.1 2 .6 1.3 2.1-3.4 7.3-6.8 14.5-10.1 21.8-.6 1.3-1.3 1.8-2.9 1.2-3.1-1.1-6.3-.1-9.5.3-.9.2-1.7.9-1.8 1.9-.2 1 .6 1.7 1.5 2.1.8.5 1.9.8 2.7 1.4 3.7 2.4 4.7 5.3 3.3 9.4-3 8.8-3 8.8-11.1 4l-3.2-1.9c-10.1-6-11.7-9.2-9.5-20.6 1.4-7.3 5.3-13.4 10.2-18.7 4-4.4 9.5-4 14.8-3.9 1.1-.1 2.2.1 3.3.1z"></path><path d="M86.6 6.8c-1.6 2.6-2.2 5.6-1.7 8.6.3 2.6-.7 4.4-2.6 6-2.4 2.2-5.2 4.1-8.1 5.6-5.5 2.6-7.6 7.3-7.8 12.7-.1 5.9-2.2 10.3-7.3 13.2-1.9 1-2.9 3.3-5.2 3.6-2.7 2.9-6.1 3.7-9.9 3.6-2.4-.1-4.8 0-7.2 0-4.9 0-8.1 2.2-9.7 6.7-1.2 3.3-2.9 6.1-5.8 8.3-1.7 1.2-2.9 3-3.5 5C15.2 90 12 99.8 11 110c-.5 5.3.8 9.7 6.1 12 .5.2.9.6 1.1 1.1 5.8 11 15.1 17.9 26.8 21.6 2.9.9 2.7 1.8 1.1 3.7l-3.9 4.8c-3.5 4.5-5.4 9.5-4.9 15.3.1 1 .3 2-.5 3.2-4.6-3.7-8.1-8.2-11.5-12.7-12.6-16.8-19-35.8-19.5-56.7-.3-21.5 5.8-41.3 18.9-58.5 7.7-10.2 16.9-19.1 28.5-25 10.1-6.5 21.1-10.1 33.4-12zM158.7 23c17.3 17.7 31.8 37.8 43.2 59.8 1.1-16.1-27.4-55.6-43.2-59.8zM101.5 5.2c-2.9 0-5.9-.1-8.8 0-1 0-2.8.3-2.1 1.8 1.3 2.5 2.7 5.1 4.8 6.9 1.6 1.3 4.1 0 6.1-.6l14.4-1.6h20.4c-6.7-3.5-13.9-4.7-21.1-5.2-4.6.4-9-1.9-13.7-1.3z" style="fill:#0f64f8"></path><path class="round-light_svg__st1" d="M111.8 40.4c1.4.1 2.7.5 3.9 1.2 1.1.6 1.3 1.9.6 2.1-2.6.7-2.2 3.1-3 4.8-2.2 4.7-7.4 5.7-11.4 2.1-.6-.5-.9-1.7-2.1-.8-.7.5-1.7 1.2-2.4 0-.6-.9-.3-1.9.4-2.8 3-3.7 9.3-6.7 14-6.6zM59.3 91.9c-4.8-1.4-10.5-.9-14.2-5.4-.5-.6-1.3-1.2-1.4-1.9-.2-1.1-1.7-2.5-.3-3.4 1.5-.9 2.1.9 2.8 1.7 3.3 4.2 7.8 3.5 12.2 3 1.8-.2 3.5-1.1 5.1-1.9 1.2-.6 2.1-.7 3 .4.9 1.1.9 2.3.1 3.4-1.6 2.7-4.2 3.6-7.3 4.1z"></path><path class="round-light_svg__st1" d="M53.9 72.2c2.5 0 4.4 2.4 4.5 5.5 0 2.5-2.1 5.3-4 5.2-1.8-.1-5.5-5.2-5.3-7.4.3-2.9 2.6-3 4.8-3.3z"></path></svg><svg id="logo-light_svg__Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 995.5 227.7" style="enable-background:new 0 0 995.5 227.7" xml:space="preserve" class="lg:hidden h-10 w-auto xl:block"><style>.logo-light_svg__st0{fill:#0f64f8}.logo-light_svg__st1{fill:#060606}.logo-light_svg__st2{fill:#fff}</style><path class="logo-light_svg__st0" d="M319.2 110.9h-16.5c-1.5-4.6-5.6-7.5-11.5-7.5-9 0-14.4 7-14.4 17.4 0 9.7 5.4 17.5 14.9 17.5 5.3.2 10.1-3.1 11.7-8.1h16.9c-3.4 12.1-12.3 22.3-28.9 22.3-17.5 0-31.6-12.5-31.6-31.8 0-17.3 12-31.3 31.5-31.3 16.9-.1 26 11.6 27.9 21.5zM370.9 105.6c-2.6-.5-5.3-.7-7.9-.7-9.9 0-14.8 6.2-14.8 16.8v28.8h-16.7V91.3h16.3v9.1h.4c3.2-5.8 9.4-10.9 17.3-10.9 1.8-.1 3.6.1 5.4.5v15.6zM435 150.4h-16.5V143h-.4c-4.8 7-10.9 9.4-17.3 9.4-9.6 0-21.5-5.9-21.5-26v-35H396v32.9c0 8.6 4.1 13.3 10.5 13.3 7.3 0 11.8-5.1 11.8-14.9V91.3H435v59.1zM450.2 91.3h16.4v7.4h.5c4.1-6.5 10.7-9.3 17.5-9.3 13.3 0 22.6 8.9 22.6 27v33.9h-16.6v-32.8c0-8.9-4.2-13.4-11.1-13.4-7.3 0-12.6 5.2-12.6 15.1v31.3h-16.7V91.3zM577.4 110.9h-16.6c-1.5-4.6-5.6-7.5-11.5-7.5-9 0-14.4 7-14.4 17.4 0 9.7 5.4 17.5 14.9 17.5 5.3.2 10.1-3.1 11.7-8.1h16.9c-3.4 12.1-12.3 22.3-28.9 22.3-17.5 0-31.6-12.5-31.6-31.8 0-17.3 12-31.3 31.5-31.3 17-.1 26.1 11.6 28 21.5zM589.7 61.5h16.7v37.2h.5c4.1-6.5 10.7-9.3 17.4-9.3 13.2 0 22.5 8.8 22.5 27v33.9H630v-33c0-8.8-4.2-13.3-11.1-13.3-7.3 0-12.6 5.1-12.6 15.1v31.3h-16.6V61.5zM678.4 179.4h-15.8l10.9-29.5L652 91.2h17.3l8.5 25.7c1.6 4.8 2.9 9.6 4 14.5h.5c1-4.9 2.3-9.8 3.8-14.5l8.3-25.7h16.4l-32.4 88.2z"></path><path class="logo-light_svg__st2" d="M789.3 150.4h-9.7v-7.9h-.2c-5.5 6.5-13.6 10.2-22.1 10.1-16 0-29.9-12.5-29.9-31.7 0-17.9 12.7-31.5 29.9-31.5 11.2 0 17 4.5 22.1 10.4h.2V61.5h9.7v88.9zm-30.4-6.6c11.5 0 21.5-9.3 21.5-22.7 0-14.1-9.4-23.3-21.2-23.3-14.4 0-21.7 11.5-21.7 23s7.2 23 21.4 23zM864.2 150.4h-9.7v-7.9h-.2c-5.3 6.4-13.3 10.1-21.6 10.1-16 0-30.4-12.5-30.4-31.7 0-18.3 13.3-31.5 31-31.5 10.7 0 17 5.7 21.1 10.5h.1v-8.5h9.7v59zm-30.3-6.6c11.1 0 21.4-9.4 21.4-22.7 0-14.1-9.5-23.3-21.1-23.3-14.8 0-21.8 11.6-21.8 23s7 23 21.5 23zM874.8 91.3h7.8V72.4h9.7v18.9h15.8v8.1h-15.8v31.3c0 9.6 3 12.2 9.3 12.2 2.4 0 4.8-.3 7.2-1v8c-3 .9-6 1.3-9.1 1.2-14.3 0-17-9.6-17-20.9V99.4h-7.8l-.1-8.1zM977.3 150.4h-9.7v-7.9h-.3c-5.3 6.4-13.3 10.1-21.6 10.1-16 0-30.4-12.5-30.4-31.7 0-18.3 13.3-31.5 31-31.5 10.7 0 17 5.7 21.1 10.5h.1v-8.5h9.8v59zm-30.2-6.6c11.2 0 21.4-9.4 21.4-22.7 0-14.1-9.5-23.3-21.1-23.3-14.8 0-21.8 11.6-21.8 23s6.9 23 21.5 23z"></path><path class="logo-light_svg__st1" d="M129.8 218.4c-48.8-.3-91.7-31.9-105.1-77.2C8.3 85.3 40.6 28.8 97.5 14.9c42.9-10.5 79.9 1.3 109.1 33.8 33.8 37.7 35.4 90.5 6.6 128.6-17.5 23.1-40.9 36.4-69.6 40.1-3.5.5-7.1.7-10.6 1-1.1.1-2.1 0-3.2 0zm-7.8-202c-2.9 0-5.9-.1-8.8 0-1 0-2.8.3-2.1 1.8 1.3 2.5 2.7 5.1 4.8 6.9 1.6 1.3 4.1 0 6.1-.6l14.4-1.6h20.4c-6.7-3.5-13.9-4.7-21.1-5.2-4.6.3-9-2-13.7-1.3zM73.7 29.9c-11.6 5.9-20.8 14.8-28.5 25C32.2 72.1 26 92 26.4 113.6c.4 20.9 6.8 39.9 19.5 56.7 3.4 4.5 6.9 9 11.5 12.6.8-1.2.5-2.3.5-3.2-.5-5.8 1.5-10.8 4.9-15.3 1.3-1.6 2.5-3.2 3.9-4.8 1.6-1.9 1.8-2.8-1.1-3.7-11.6-3.7-20.9-10.6-26.8-21.6-.2-.5-.6-.9-1.1-1.1-5.3-2.3-6.6-6.7-6.1-12 1-10.3 4.1-20 6.8-29.9.6-2 1.8-3.8 3.5-5 2.9-2.1 4.6-4.9 5.8-8.3 1.6-4.6 4.8-6.7 9.7-6.7 2.4 0 4.8-.1 7.2 0 3.8.1 7.2-.6 9.9-3.6 2.4-.3 3.4-2.5 5.2-3.6 5.1-2.9 7.2-7.3 7.3-13.2.1-5.5 2.3-10.1 7.8-12.7 3-1.5 5.7-3.4 8.2-5.6 1.8-1.6 2.9-3.4 2.6-6-.5-3 .1-6.1 1.7-8.6-12.6 1.8-23.6 5.5-33.6 11.9zm44 63.9c5.7.1 9.9 2.6 13.7 5.9 7 6 8.8 22.6-1.5 28.2-9.2 5-18.7 8.1-29.3 7.2-4.9-.4-9.8-.9-14.7-1.4-12.1-1.2-24.1-3.4-36.3-1.6-2.8.4-3.6 1.1-1.7 3.4 7.5 9.3 17.1 14.5 29.3 13.8 12-.6 24-2.4 36-.2 13.6 2.5 24.1-1.7 31.5-13.5.9-1.5 2.1-3 4.1-1.8 2 1.2 1.3 2.8.2 4.4-6.3 9.9-14 17.6-26.9 17.3-2 0-4.1.4-6.2.6-1.9.2-3.6.8-4.7 2.5-2.4 3.6-5.1 7.1-6.7 11.2l-12.6 32.4c-.9 2.3-.5 3.7 2.1 4.6 11.2 3.9 22.9 6 34.8 6.1 22.6.1 42.9-6.6 61-20.1 1.1-.8 1.7-1.6 1.2-2.8-3-7.8-.9-15.3 1.2-22.9 1.7-6.2 2.9-12.5 1.8-19-1.1-6.5-1-6.5-6.3-3.1-4.5 3-9.6 4.8-14.6 6.7-1.9.7-4.6 1-5.3-.7-1-2.4 2.1-2.4 3.5-3.1 4.1-2 8.8-3 12.4-5.9 9.4-7.6 13.9-18 15.5-29.7.8-5.3 1-10.7 1.5-16.1.1-1 .2-2.1 1.7-2.1s1.4 1.2 1.5 2.2c.1.8-.1 1.6 0 2.4.4 12.6-2.3 24.9-4.3 37.2-2 12.9-.6 25.6 2.2 38.2.4 1.6 1 3.5 2.3 3.9 1.8.6 2.5-1.6 3.4-2.8 9-11.6 14.7-24.7 17.7-39.1 2.3-11.1 2-21.7-3.8-32-4.1-7.3-7.7-14.8-11.7-22.2-8.2-15.3-19.9-28-30.8-41.2-3.3-4-7-7.9-11.8-10.4-.7-.3-1.4-1.1-2.2-.7-1.1.6-.4 1.7-.3 2.5 1.5 6-3.9 12.8-9.7 14.9-1.3.5-2.9 1.1-3.7-.4-.8-1.5 1-2 1.9-2.8 3.9-3.4 6.1-9 5.1-13.3-2.9 1.4-5.3 3.1-6.7 6-.6 1.3-1.5 3.7-3.1 2.8-1.9-1.1-.9-3.3.2-4.9.9-1.5 2.1-2.7 3.6-3.7s3.4-1.1 4.9-2.7c-1.6-.9-3.5-1.3-5.4-1.2-10.8.1-21.6-.1-32.3 2.1-3.4.6-6.8 1.4-9.5 3.8-3.8 3.5-8.1 6.5-12.6 8.8-1.9 1-3.8 2.1-3.1 4.7.6 2.4 2.6 3.6 5 3.9 1 .1 2.3-.2 2.6 1.2.3 1.2-1 1.7-1.7 2.3C93 58.8 86.3 64.3 79.6 70c-4.3 3.7-9.9 5.7-15.5 5.5-2.3-.1-4.6 0-6.9 0-5.4 0-6.6 1.6-5.1 6.8.5 1.9.7 3.9-1 5.4s-3.5 1.4-5.3-.1c-.9-.7-1.6-.4-2.3.5-1.6 1.9-1.3 3.4 1.2 4 4.4 1.2 7.7-1.1 10.8-3.9.6-.6 1.4-1.6 2.3-.9 1 .7.4 1.7-.1 2.5-1.9 3.7-9.4 7.7-13.6 7.2-1.1-.1-1.7 0-2 1.2-1.8 7.2-4.1 14.3-4.7 21.8-.6 7.6 1.2 9.1 8.7 7.4 12.4-2.9 24.6-3.7 37 .2 6.7 2.1 13.8 2.3 20.9 1.5 8.2-.9 16.4-2.3 23.2-7.5 2.7-1.9 4.3-4.8 4.6-8.1.5-4.9-1.8-8.4-5.1-11.5-2.8-2.8-5.7-5.3-9-8.2zm-25.1 59.4v.1c-1.1-.1-2.3-.2-3.4-.2-5.3-.1-10.7-.5-14.8 3.9-5 5.4-8.9 11.4-10.2 18.7-2.2 11.5-.6 14.7 9.5 20.6l3.2 1.9c8.2 4.7 8.2 4.7 11.1-4.1 1.4-4.1.4-7-3.3-9.4-.9-.6-1.8-.9-2.7-1.4-.9-.5-1.6-1.1-1.5-2.1.1-.9.9-1.7 1.8-1.9 3.2-.4 6.4-1.5 9.5-.3 1.6.6 2.3.1 2.9-1.2 3.3-7.3 6.7-14.5 10.1-21.8.7-1.5.3-2-1.3-2.1-3.6-.2-7.2-.5-10.9-.7zm86.6-119.1c17.3 17.7 31.8 37.8 43.2 59.8 1.1-16-27.4-55.5-43.2-59.8z"></path><path class="logo-light_svg__st2" d="M117.7 93.8c3.3 2.9 6.2 5.4 9.1 8.1 3.3 3.1 5.5 6.6 5.1 11.5-.2 3.2-1.9 6.2-4.6 8.1-6.9 5.2-15 6.7-23.2 7.5-7 .7-14.2.6-20.9-1.5-12.4-3.9-24.7-3.1-37-.2-7.6 1.8-9.3.3-8.7-7.4.6-7.5 2.9-14.6 4.7-21.8.3-1.2.9-1.3 2-1.2 4.2.5 11.6-3.4 13.6-7.2.4-.8 1-1.8.1-2.5s-1.7.3-2.3.9c-3 2.8-6.3 5.1-10.8 3.9-2.5-.6-2.8-2.1-1.2-4 .7-.9 1.4-1.2 2.3-.5 1.8 1.4 3.6 1.6 5.3.1 1.7-1.5 1.6-3.5 1-5.4-1.4-5.2-.3-6.8 5.1-6.8 2.3 0 4.6-.1 6.9 0 5.7.2 11.3-1.7 15.5-5.5 6.6-5.7 13.4-11.2 20.2-16.6.8-.6 2-1.1 1.7-2.3-.3-1.3-1.6-1-2.6-1.2-2.4-.3-4.3-1.5-5-3.9-.7-2.6 1.2-3.7 3.1-4.7 4.6-2.4 8.8-5.4 12.6-8.8 2.7-2.4 6.1-3.1 9.5-3.8 10.6-2.1 21.5-1.9 32.3-2.1 1.9-.1 3.7.3 5.4 1.2-1.5 1.5-3.4 1.7-4.9 2.7-1.4 1-2.6 2.2-3.6 3.7-1 1.6-2.1 3.8-.2 4.9 1.6.9 2.5-1.5 3.1-2.8 1.4-3 3.9-4.7 6.7-6 1 4.3-1.2 9.9-5.1 13.3-.9.8-2.7 1.3-1.9 2.8.8 1.5 2.4.8 3.7.4 5.8-2 11.2-8.8 9.7-14.9-.2-.8-.9-1.9.3-2.5.8-.4 1.5.4 2.2.7 4.8 2.5 8.4 6.4 11.8 10.4 10.9 13.3 22.6 26 30.8 41.2 4 7.4 7.6 14.9 11.7 22.2 5.8 10.3 6.1 20.9 3.8 32-3 14.4-8.7 27.5-17.7 39.1-.9 1.2-1.6 3.4-3.4 2.8-1.3-.4-2-2.3-2.3-3.9-2.8-12.6-4.2-25.3-2.2-38.2 1.9-12.3 4.7-24.6 4.3-37.2 0-.8.1-1.6 0-2.4-.1-1 0-2.2-1.5-2.2s-1.6 1.1-1.7 2.1c-.5 5.4-.7 10.8-1.5 16.1-1.7 11.7-6.1 22.1-15.5 29.7-3.6 2.9-8.3 3.8-12.4 5.9-1.5.7-4.5.7-3.5 3.1.7 1.8 3.5 1.4 5.3.7 5-1.9 10.1-3.7 14.6-6.7 5.3-3.5 5.2-3.5 6.3 3.1s0 12.8-1.8 19c-2.1 7.6-4.2 15.1-1.2 22.9.5 1.3-.1 2-1.2 2.8-18 13.5-38.3 20.2-60.9 20.1-11.8-.1-23.6-2.1-34.8-6.1-2.6-.9-3-2.2-2.1-4.6 4.2-10.8 8.3-21.6 12.6-32.4 1.6-4.1 4.3-7.6 6.7-11.2 1.1-1.6 2.8-2.3 4.7-2.5 2.1-.2 4.1-.6 6.2-.6 12.9.3 20.6-7.4 26.9-17.3 1-1.6 1.7-3.2-.2-4.4s-3.2.3-4.1 1.8c-7.4 11.8-18 16-31.5 13.5-12-2.2-24-.4-36 .2-12.1.6-21.7-4.6-29.3-13.8-1.9-2.3-1.1-3 1.7-3.4 12.2-1.9 24.3.4 36.3 1.6 4.9.5 9.8.9 14.7 1.4 10.6 1 20.1-2.2 29.3-7.2 10.3-5.6 8.5-22.2 1.5-28.2-3.7-3-7.9-5.6-13.6-5.6zm14.6-42.3c-4.8-.1-11 3-13.9 6.7-.7.9-1 1.9-.4 2.8.6 1.1 1.6.5 2.4 0 1.2-.9 1.5.3 2.1.8 4 3.6 9.2 2.6 11.4-2.1.8-1.7.3-4 3-4.8.7-.2.4-1.6-.6-2.1-1.3-.8-2.7-1.2-4-1.3zM79.8 103c3-.5 5.7-1.4 7.4-4 .8-1.2.8-2.3-.1-3.4-1-1.1-1.8-1-3-.4-1.6.8-3.4 1.6-5.1 1.9-4.4.5-8.9 1.2-12.2-3-.7-.9-1.3-2.6-2.8-1.7-1.4.9.1 2.3.3 3.4.1.7.9 1.3 1.4 1.9 3.6 4.5 9.3 4 14.1 5.3zm-5.4-19.7c-2.2.3-4.5.4-4.8 3.3-.2 2.2 3.5 7.3 5.3 7.4 1.9.1 4.1-2.6 4-5.2-.1-3.1-2-5.4-4.5-5.5z"></path><path class="logo-light_svg__st2" d="M92.6 153.1c3.7.3 7.3.6 11 .8 1.6.1 2 .6 1.3 2.1-3.4 7.3-6.8 14.5-10.1 21.8-.6 1.3-1.3 1.8-2.9 1.2-3.1-1.1-6.3-.1-9.5.3-.9.2-1.7.9-1.8 1.9-.2 1 .6 1.7 1.5 2.1.8.5 1.9.8 2.7 1.4 3.7 2.4 4.7 5.3 3.3 9.4-3 8.8-3 8.8-11.1 4l-3.2-1.9c-10.1-6-11.7-9.2-9.5-20.6 1.4-7.3 5.3-13.4 10.2-18.7 4-4.4 9.5-4 14.8-3.9 1 0 2.2.1 3.3.1z"></path><path class="logo-light_svg__st0" d="M107.1 17.9c-1.6 2.6-2.2 5.6-1.7 8.6.3 2.6-.7 4.4-2.6 6-2.4 2.2-5.2 4.1-8.1 5.6-5.5 2.6-7.6 7.3-7.8 12.7-.1 5.9-2.2 10.3-7.3 13.2-1.9 1-2.9 3.3-5.2 3.6-2.7 2.9-6.1 3.7-9.9 3.6-2.4-.1-4.8 0-7.2 0-4.9 0-8.1 2.2-9.7 6.7-1.2 3.3-2.9 6.1-5.8 8.3-1.7 1.2-2.9 3-3.5 5-2.6 9.9-5.8 19.7-6.8 29.9-.5 5.3.8 9.7 6.1 12 .5.2.9.6 1.1 1.1 5.8 11 15.1 17.9 26.8 21.6 2.9.9 2.7 1.8 1.1 3.7l-3.9 4.8c-3.5 4.5-5.4 9.5-4.9 15.3.1 1 .3 2-.5 3.2-4.6-3.7-8.1-8.2-11.5-12.7-12.6-16.8-19-35.8-19.5-56.7-.4-21.4 5.8-41.3 18.9-58.5 7.7-10.2 16.9-19.1 28.5-25 10-6.4 21-10.1 33.4-12zm72.1 16.2c17.3 17.7 31.8 37.8 43.2 59.8 1.1-16-27.4-55.5-43.2-59.8zM122 16.4c-2.9 0-5.9-.1-8.8 0-1 0-2.8.3-2.1 1.8 1.3 2.5 2.7 5.1 4.8 6.9 1.6 1.3 4.1 0 6.1-.6l14.4-1.6h20.4c-6.7-3.5-13.9-4.7-21.1-5.2-4.6.3-9-2-13.7-1.3z"></path><path class="logo-light_svg__st1" d="M132.3 51.5c1.4.1 2.7.5 3.9 1.2 1.1.6 1.3 1.9.6 2.1-2.6.7-2.2 3.1-3 4.8-2.2 4.7-7.4 5.7-11.4 2.1-.6-.5-.9-1.7-2.1-.8-.7.5-1.7 1.2-2.4 0-.6-.9-.3-1.9.4-2.8 3-3.6 9.2-6.6 14-6.6zM79.8 103c-4.8-1.4-10.5-.9-14.2-5.4-.5-.6-1.3-1.2-1.4-1.9-.2-1.1-1.7-2.5-.3-3.4 1.5-.9 2.1.9 2.8 1.7 3.3 4.2 7.8 3.5 12.2 3 1.8-.2 3.5-1.1 5.1-1.9 1.2-.6 2.1-.7 3 .4.9 1.1.9 2.3.1 3.4-1.6 2.7-4.3 3.6-7.3 4.1z"></path><path class="logo-light_svg__st1" d="M74.4 83.3c2.5 0 4.4 2.4 4.5 5.5 0 2.5-2.1 5.3-4 5.2-1.8-.1-5.5-5.2-5.3-7.4.3-2.9 2.6-3 4.8-3.3z"></path></svg></a><div class="hidden flex-grow justify-between lg:flex"><div class="flex"><div class="flex items-center" data-headlessui-state=""><div class="group relative index-1"><button class="group/btn relative flex h-full font-display items-center gap-1 py-2 px-3 text-sm rounded-md transition-colors font-semibold text-slate-900 dark:text-white" type="button" aria-expanded="false" data-headlessui-state="">Products<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="size-5 -mr-1 relative top-px text-slate-400 dark:text-white/60"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></button><div class="left-0 lg:[.index-1_&amp;]:left-[-57px] xl:[.index-1_&amp;]:left-[-195px] lg:[.index-4_&amp;]:left-[-367px] xl:[.index-4_&amp;]:left-[-505px] origin-top-left absolute top-full mt-6 z-10 w-max lg:max-w-[calc(100vw-60px)] xl:max-w-[1216px] transform overflow-hidden rounded-xl bg-white dark:bg-gray-900 shadow-lg ring-1 ring-black/5 dark:ring-gray-700" hidden="" style="display:none" id="headlessui-popover-panel-:Rib599p:" tabindex="-1" data-headlessui-state=""><div class="flex"></div></div></div></div><div style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><div class="flex items-center" data-headlessui-state=""><div class="group relative index-2"><button class="group/btn relative flex h-full font-display items-center gap-1 py-2 px-3 text-sm rounded-md transition-colors font-semibold text-slate-900 dark:text-white" type="button" aria-expanded="false" data-headlessui-state="">Cloud<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="size-5 -mr-1 relative top-px text-slate-400 dark:text-white/60"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></button><div class="left-0 lg:[.index-1_&amp;]:left-[-57px] xl:[.index-1_&amp;]:left-[-195px] lg:[.index-4_&amp;]:left-[-367px] xl:[.index-4_&amp;]:left-[-505px] origin-top-left absolute top-full mt-6 z-10 w-max lg:max-w-[calc(100vw-60px)] xl:max-w-[1216px] transform overflow-hidden rounded-xl bg-white dark:bg-gray-900 shadow-lg ring-1 ring-black/5 dark:ring-gray-700" hidden="" style="display:none" id="headlessui-popover-panel-:Rij599p:" tabindex="-1" data-headlessui-state=""><div class="flex"></div></div></div></div><div style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><div class="flex items-center" data-headlessui-state=""><div class="group relative index-3"><button class="group/btn relative flex h-full font-display items-center gap-1 py-2 px-3 text-sm rounded-md transition-colors font-semibold text-slate-900 dark:text-white" type="button" aria-expanded="false" data-headlessui-state="">Solutions<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="size-5 -mr-1 relative top-px text-slate-400 dark:text-white/60"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></button><div class="left-0 lg:[.index-1_&amp;]:left-[-57px] xl:[.index-1_&amp;]:left-[-195px] lg:[.index-4_&amp;]:left-[-367px] xl:[.index-4_&amp;]:left-[-505px] origin-top-left absolute top-full mt-6 z-10 w-max lg:max-w-[calc(100vw-60px)] xl:max-w-[1216px] transform overflow-hidden rounded-xl bg-white dark:bg-gray-900 shadow-lg ring-1 ring-black/5 dark:ring-gray-700" hidden="" style="display:none" id="headlessui-popover-panel-:Rir599p:" tabindex="-1" data-headlessui-state=""><div class="flex"></div></div></div></div><div style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><div class="flex items-center" data-headlessui-state=""><div class="group relative index-4"><button class="group/btn relative flex h-full font-display items-center gap-1 py-2 px-3 text-sm rounded-md transition-colors font-semibold text-slate-900 dark:text-white" type="button" aria-expanded="false" data-headlessui-state="">Developer?<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="size-5 -mr-1 relative top-px text-slate-400 dark:text-white/60"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></button><div class="left-0 lg:[.index-1_&amp;]:left-[-57px] xl:[.index-1_&amp;]:left-[-195px] lg:[.index-4_&amp;]:left-[-367px] xl:[.index-4_&amp;]:left-[-505px] origin-top-left absolute top-full mt-6 z-10 w-max lg:max-w-[calc(100vw-60px)] xl:max-w-[1216px] transform overflow-hidden rounded-xl bg-white dark:bg-gray-900 shadow-lg ring-1 ring-black/5 dark:ring-gray-700" hidden="" style="display:none" id="headlessui-popover-panel-:Rj3599p:" tabindex="-1" data-headlessui-state=""><div class="flex"></div></div></div></div><div style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><a class="flex h-full items-center py-2 px-3 transition ease-in-out duration-150 text-base lg:text-sm group-hover/link:text-blue-600 font-[550] dark:!text-white text-slate-900 dark:text-white" href="/customers">Customers</a><a class="flex h-full items-center py-2 px-3 transition ease-in-out duration-150 text-base lg:text-sm group-hover/link:text-blue-600 font-[550] dark:!text-white text-slate-900 dark:text-white" href="/pricing">Pricing</a></div><div class="flex"><a class="flex h-full items-center py-2 px-3 transition ease-in-out duration-150 text-base lg:text-sm group-hover/link:text-blue-600 font-[550] dark:!text-white text-slate-900 dark:text-white" href="/blog">Blog</a><a class="flex h-full items-center py-2 px-3 transition ease-in-out duration-150 text-base lg:text-sm group-hover/link:text-blue-600 font-[550] dark:!text-white text-slate-900 dark:text-white" href="/contact">Contact</a><div class="ml-3 flex items-center gap-3"><div class="flex items-center" data-headlessui-state=""><div class="group relative index-1"><button class="group/btn relative flex h-full font-display items-center gap-1 py-2 px-3 text-sm rounded-md transition-colors btn border border-blue-600/50 hover:border-blue-700 hover:bg-blue-700 text-blue-600 hover:text-white" type="button" aria-expanded="false" data-headlessui-state="">Login<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="size-5 -mr-1 relative top-px text-blue-600/50 group-hover/btn:text-white/60"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></button><div class="right-0 origin-top-right absolute top-full mt-6 z-10 w-max lg:max-w-[calc(100vw-60px)] xl:max-w-[1216px] transform overflow-hidden rounded-xl bg-white dark:bg-gray-900 shadow-lg ring-1 ring-black/5 dark:ring-gray-700" hidden="" style="display:none" id="headlessui-popover-panel-:R15t599p:" tabindex="-1" data-headlessui-state=""><div class="flex"><div class="flex flex-col justify-between gap-4 lg:gap-x-7 lg:gap-y-0"><div class="flex-1 flex flex-col lg:max-w-80 gap-y-0.5"><div class="px-7 py-3.5"><div class="group/link flex flex-col space-y-1 relative -mx-3 px-3 lg: py-2 after:z-[-1] after:absolute after:inset-0 after:bg-gradient-to-br after:from-blue-50 after:to-blue-100 after:rounded-lg after:opacity-0 hover:after:opacity-100 after:scale-90 hover:after:scale-100 after:transition-all after:duration-150 dark:after:bg-blue-600 dark:after:from-blue-600 dark:after:to-blue-600"><a href="https://access.crunchydata.com" class="transition ease-in-out duration-150 text-base lg:text-sm group-hover/link:text-blue-600 font-[550] dark:!text-white text-slate-900 dark:text-white">Access Portal<span class="absolute inset-0" aria-hidden="true"></span></a></div><div class="group/link flex flex-col space-y-1 relative -mx-3 px-3 lg: py-2 after:z-[-1] after:absolute after:inset-0 after:bg-gradient-to-br after:from-blue-50 after:to-blue-100 after:rounded-lg after:opacity-0 hover:after:opacity-100 after:scale-90 hover:after:scale-100 after:transition-all after:duration-150 dark:after:bg-blue-600 dark:after:from-blue-600 dark:after:to-blue-600"><a href="https://www.crunchybridge.com/login" class="transition ease-in-out duration-150 text-base lg:text-sm group-hover/link:text-blue-600 font-[550] dark:!text-white text-slate-900 dark:text-white">Crunchy Bridge<span class="absolute inset-0" aria-hidden="true"></span></a></div></div></div></div></div></div></div></div><div style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><a href="https://www.crunchybridge.com/register" class="btn py-2 px-3 text-sm font-semibold bg-blue-600 text-white hover:bg-blue-700 focus:bg-blue-700 active:bg-blue-700 group-focus-within:bg-blue-700">Register</a></div></div></div><div class="-my-2 -mr-2 lg:hidden"><button class="inline-flex items-center justify-center rounded-md bg-white dark:bg-gray-900 p-2 text-slate-400 dark:text-slate-100 hover:dark:bg-gray-800 hover:dark:text-white hover:bg-gray-100 hover:text-slate-500 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-primary" type="button" aria-expanded="false" data-headlessui-state=""><span class="sr-only">Open menu</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="h-6 w-6"><path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"></path></svg></button></div></div></nav><div style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><div class="flex-grow"><div><div class="bg-gray-900 text-white invert-color min-h-screen"><section class="mx-auto max-w-4xl px-6 lg:w-5/6 lg:max-w-7xl lg:px-8 pt-10 pb-16 lg:pb-24 xl:pt-24"><div class="flex flex-col xl:flex-row xl:items-center gap-y-10 gap-x-24"><div class="hidden lg:block"><svg class="w-full max-w-md xl:w-96 h-auto" viewBox="0 0 200 200" height="400" width="400" xmlns="http://www.w3.org/2000/svg"><path d="M71.5,55.249c14.855.534-3.138,1.2-40.192,1.473-3.287.042-6.574.021-9.861.064-4.44.042-8.9-.043-13.341.256-.747.043-.661.6-.661,1.174L7.4,59.987c-.512,17.247-.235,34.536.683,51.761.256,4.61.555,9.22.811,13.831.448,7.406.086,6.681-.9-.555A397.911,397.911,0,0,1,5.071,70.937c.021-2.817-.086-5.656-.022-8.474.022-1.985-.491-5.784,1.366-7.107,1.324-.961,4.077-.534,5.635-.577,2.3-.064,4.632-.085,6.937-.106,4.632-.022,9.242.021,13.874.042,16.99.064,31.227.256,38.634.534Z" class="fill-current text-white"></path><path d="M40.63,98.322H79.755c0-10.352-.022-23.543-.022-33.895,0-.832-.064-1.814-.768-2.22a2.375,2.375,0,0,0-1.281-.235q-31.183-.063-62.347.043a2.332,2.332,0,0,0-2.326,2.327c-.171,21.472-.235,42.966.32,64.417a8.566,8.566,0,0,0,1.707,5.272l.278.278a3.073,3.073,0,0,0,1.814.384c7.343,0,14.685-.021,22.049-.021L36.831,102.42a3.777,3.777,0,0,1,3.8-4.1ZM43.555,94.5c0,.406-.128.726-.3.726H38.581c-.17,0-.3-.32-.3-.726v-1c0-.405.129-.726.3-.726h4.675c.171,0,.3.321.3.726ZM58.09,89.592c0,.406-.128.726-.3.726H53.117c-.171,0-.3-.32-.3-.726v-1c0-.406.128-.726.3-.726h4.674c.171,0,.3.32.3.726Zm12.188-13.4v1a.676.676,0,0,1-.619.726H59.606a.676.676,0,0,1-.619-.726v-1a.676.676,0,0,1,.619-.726H69.659A.662.662,0,0,1,70.278,76.188ZM54.334,69.72c0-.405.234-.725.49-.725h7.834c.277,0,.491.32.491.725v1c0,.405-.235.725-.491.725H54.824c-.277,0-.49-.32-.49-.725Zm-16.521,0A.719.719,0,0,1,38.539,69H50.278A.719.719,0,0,1,51,69.72v1a.719.719,0,0,1-.726.725H38.539a.719.719,0,0,1-.726-.725Zm0,6.468c0-.406.405-.726.939-.726H53.843c.533,0,.939.32.939.726v1c0,.406-.406.726-.939.726H38.752c-.534,0-.939-.32-.939-.726Zm0,6.873c0-.406.405-.726.939-.726H58.368a.676.676,0,0,1,.619.726v1a.677.677,0,0,1-.619.726H38.752c-.534,0-.939-.321-.939-.726Zm0,5.528a.7.7,0,0,1,.683-.726H49.552a.7.7,0,0,1,.683.726v1a.7.7,0,0,1-.683.726H38.5a.7.7,0,0,1-.683-.726Zm-18.463,35.5a1.82,1.82,0,0,1-2.134-.128c-.342-.491.064-1.217.917-1.6a1.819,1.819,0,0,1,2.135.128C20.588,122.975,20.182,123.7,19.35,124.085Zm0-8.495a1.82,1.82,0,0,1-2.134-.128c-.342-.491.064-1.217.917-1.6a1.819,1.819,0,0,1,2.135.128C20.588,114.48,20.182,115.206,19.35,115.59Zm0-8.474a1.82,1.82,0,0,1-2.134-.128c-.342-.491.064-1.217.917-1.6a1.822,1.822,0,0,1,2.135.128C20.588,105.985,20.182,106.689,19.35,107.116Zm12.038,17.14c-2.839.405-6.04.341-7.193-.129-1.152-.49.235-1.195,3.074-1.6s6.04-.342,7.193.128C35.593,123.124,34.227,123.85,31.388,124.256Zm0-8.5c-2.839.406-6.04.342-7.193-.128-1.152-.491.235-1.2,3.074-1.6s6.04-.342,7.193.128C35.593,114.629,34.227,115.355,31.388,115.76Zm0-8.5c-2.839.406-6.04.342-7.193-.128-1.152-.491.235-1.2,3.074-1.6s6.04-.341,7.193.129C35.593,106.134,34.227,106.86,31.388,107.265Zm3.629-12.614c-.534,2.86-1.2-.619-1.516-7.748s-.128-15.24.385-18.1c.533-2.861,1.2.619,1.515,7.748C35.7,83.7,35.55,91.791,35.017,94.651Z" class="fill-current text-primary"></path><path d="M83.981,43.467c-.363-4.013-.277-8.09-.512-12.081a.88.88,0,0,0-.9-.854c-8.858-.021-18.185.064-27.043.256a.848.848,0,0,0-.854.875c0,2.305.021,8.773,0,11.889a.472.472,0,0,0,.534.6H83.341a.645.645,0,0,0,.555-.192.685.685,0,0,0,.085-.491ZM60.716,37.554a14.036,14.036,0,0,1,2.668,2.327c.853,1.2-.875.854-3.928-.769l-1.152-.64-.577-.341-.277-.171a1.077,1.077,0,0,1-.363-.342A1.236,1.236,0,0,1,57,36.3a1.454,1.454,0,0,1,.619-.555l.17-.085.3-.128.577-.278c.384-.171.747-.32,1.131-.491a13.131,13.131,0,0,1,3.436-1.046c1.452-.106.214,1.217-2.753,2.946l-.555.3a9.585,9.585,0,0,0,.79.6Zm9.8-1.494c-.939,2.156-2.434,4.312-3.351,4.8-.918.512-.9-.854.042-2.967.939-2.135,2.434-4.29,3.351-4.781C71.452,32.6,71.452,33.926,70.513,36.06Zm10.587,1a1.4,1.4,0,0,1-.427.811,24.449,24.449,0,0,1-2.135,1.537,12.507,12.507,0,0,1-3.18,1.708c-1.388.384-.384-1.2,2.156-3.437l.576-.512c-.278-.107-.534-.235-.768-.341a13.274,13.274,0,0,1-3.117-1.815c-1.046-.982.747-.982,4.034.022l1.238.384.619.213.171.043a1.066,1.066,0,0,1,.32.171,1.624,1.624,0,0,1,.513,1.216Z" class="fill-current text-primary"></path><path d="M128.655,57.6c.384-.022.64-.577.6-1.217s-.385-1.152-.769-1.131-.64.576-.6,1.217C127.951,57.149,128.292,57.639,128.655,57.6Z" class="fill-current text-white"></path><path d="M119.818,55.612c-.384.021-.661.6-.619,1.259s.406,1.174.811,1.153c.385-.022.662-.6.619-1.26S120.2,55.59,119.818,55.612Z" class="fill-current text-white"></path><path d="M122.124,53.072c-.982-4.419-5.87-1.943-6.318-.854s.811,1.558,1.131,1.259c3.5-3.393,5.507.982,5.187-.4Z" class="fill-current text-white"></path><path d="M131.75,54.118c.256.341,1.579.106,1.3-1.025-.278-1.153-4.653-4.4-6.339-.277-.555,1.344,2.134-2.583,5.037,1.3Z" class="fill-current text-white"></path><path d="M124.877,62.57c.854-.085.448-1.387.107-1.494a16.326,16.326,0,0,1-2.113-.278c-.128-.128.768-4.076.192-4.567,0,0-1.665,4.077-1.516,4.845.15.811,2.476,1.579,3.33,1.494Z" class="fill-current text-white"></path><path d="M129.551,66.519a.552.552,0,0,0-.9-.6c-1.878,2.967-3.735.448-3.372,1.323,1.216,2.754,4.1.107,4.268-.725Z" class="fill-current text-white"></path><path d="M192.155,114.992a45.356,45.356,0,0,0-20.47-23.863,57.423,57.423,0,0,0-16.328-6.147,111.488,111.488,0,0,0-11.27-1.558v-.043c.021-3.415.021-6.83.021-10.224V65.793a7.3,7.3,0,0,0,0-2.262c.491,1.152,1.644,2.07,4.44,1.152,5.037-1.643,7.833-7.556,6.788-12.593a17.583,17.583,0,0,0-1.9-4.461c2.519.448,5.784-.128,7.6-2.5,2.8-3.693-2.327-7-2.327-7s4.226-5.422-3.138-9.114c-4.845-2.434-6.894,1.131-7.684,3.82a15.115,15.115,0,0,0-5.1-7.556c-3.2-2.348-7-1.835-10.224.214a1.88,1.88,0,0,0-.277.17,3.424,3.424,0,0,1,.256.321,2.635,2.635,0,0,1,.512,1.536c-.064.342-.278.342-.534.171-.277-.192-.619-.555-1.067-.96-.192-.171-.384-.342-.576-.491-2.263-.961-13.831-5.315-15.283,6.873,0,0-8.41,3.2-6.446,11.1a6.615,6.615,0,0,0,5,5.037,5.441,5.441,0,0,0-.363,1.409,24.468,24.468,0,0,0-.256,4.93,31.689,31.689,0,0,0,1.152,7.065,25.484,25.484,0,0,0,3.095,7.983c3.223,4.931,10.032,6.254,15.262,4.056a8.484,8.484,0,0,0,3.82-3.031c.619-.961.705-1.58.619-1.686-.106-.107-.384.3-1.131,1a9.541,9.541,0,0,1-3.693,2.2,13.1,13.1,0,0,1-6.339.427,9.828,9.828,0,0,1-6.275-3.564,22.525,22.525,0,0,1-3.074-6.66A51.839,51.839,0,0,1,114.61,50.9a8.068,8.068,0,0,0-.192-1.6,9.735,9.735,0,0,0,10.971-7.172c-.213.683,1.132,2.391,1.537,2.882a7.205,7.205,0,0,0,2.519,2.006,8.8,8.8,0,0,0,7.193.064,9.43,9.43,0,0,0,3.095-1.878c.277-.278,1.28-2.135,1.707-1.964.086.021.171.107.214.277a2.732,2.732,0,0,1-.854,2.626,2.958,2.958,0,0,1-.9.619c-.064,2.284.213,6.211,2.817,7.278,3.436,1.452,1.878,1.388,3.287-.768a2.79,2.79,0,0,1,2.711-.705c2.454.833,1.729,5.187-.064,6.318a8.254,8.254,0,0,1-4.077.961c-.982.085-1.644.3-1.836,1.409a51.788,51.788,0,0,0-.192,6.04c-.042,2.177-.106,4.333-.171,6.51-.064,3.181-.106,6.361-.192,9.541a2.635,2.635,0,0,0,.214,1.345c.555.96,2.006.875,2.945.982.982.128,1.985.256,3.031.384-4.631,4.226-9.007,6.04-13.02,5.4-4.653-.747-7.663-4.674-8.836-6.51.853-.043,1.686-.064,2.54-.085.661-.022,2.07.277,2.518-.342a1.8,1.8,0,0,0,.171-.576,13.237,13.237,0,0,0-.128-2.433c-.128-1-.32-1.857-.427-2.54a11.474,11.474,0,0,0-.448-2.263c-.235-.128-.363,1.729-.363,1.836-.043,1.494.128,2.967.043,4.439,0,.086-.022.214-.022.3,0-.043-8.836.086-9.583.107a40.8,40.8,0,0,0-19.893,6.062,50.71,50.71,0,0,0-11.761,9.882c-1.857,2.156-1.836,2.562.384.769,5.592-4.461,11.313-8.944,17.972-11.654,1.067-.427,2.156-.833,3.244-1.2A46.087,46.087,0,0,1,121.249,85.3c1.366-.064,2.732-.214,3.991-.278A17.893,17.893,0,0,1,126.5,86.9a15.918,15.918,0,0,0,2.455,2.625c6.894,5.977,15.176,2.2,20.9-3.266.7.086,1.409.192,2.113.3,11.206,1.686,22.305,7.172,29.968,15.6a43.3,43.3,0,0,1,8.9,15.027,50.151,50.151,0,0,1,2.242,9.839,29.949,29.949,0,0,1-3.757,19.381,28.542,28.542,0,0,1-4.5,5.486c-.853.832-1.729,1.622-2.646,2.412-.406.341-1.366.853-1.559,1.366-.042.106.321-.043,1.089-.513a27.307,27.307,0,0,0,8.324-7.705c6.7-9.562,5.827-21.942,2.135-32.465Z" class="fill-current text-white"></path><path d="M174.674,168.609a13.377,13.377,0,0,0-.128-4.61c-.193-.64-.854-1.366-1.58-1.259-6.062,1-12.124,2.027-18.228,2.924-5.656.9-11.334,1.6-16.99,2.454a36.546,36.546,0,0,1-4.312.619,58.585,58.585,0,0,1-.768-7.513c-.256-2.753-.448-5.485-.683-8.239-.662-8.3-1.238-17.353-2.476-26.979-.619-4.8-1.366-9.755-2.433-14.813-.278-1.26-.555-2.519-.833-3.8a3.868,3.868,0,0,0-1.473-2.241,4.3,4.3,0,0,0-2.5-.7c-2.647-.021-5.272-.043-7.94-.107-12.3-.384-24.61-1.046-36.862-1.878-8.9-.6-17.8-1.281-26.723-1.622-2.028-.064-4.056-.086-6.083-.022-1.6.064-3.394.128-4.483,1.516-1.152,1.409-.747,3.308-.64,4.973.213,3.052.427,6.083.64,9.157.747,10.843,1.708,21.707,2.839,32.507.171,1.5.32,2.946.491,4.44.342,3.095.726,6.19,1.153,9.264.256,1.835.555,3.628.811,5.464a5.132,5.132,0,0,0,2.3,3.863c1.494.854,3.394.619,5.037.683q16.3.736,32.593,1.452,12.488.543,25,1.067c6.467.277,12.956.555,19.423.854,1.58.064,3.18.128,4.76.213h.107c7-.939,14.023-1.9,21.024-2.839,5.806-.768,11.633-1.579,17.438-2.39,1.2-.15,1.43-1.473,1.516-2.434Zm-112.23,2.434c-4.29-.214-8.6-.427-12.977-.641-1.729-.085-2.006-2.54-2.156-3.842-.256-2.412-.64-4.8-.939-7.214-1.089-8.9-1.942-17.994-2.753-27.129-.769-9.135-1.516-18.4-2.092-27.556-.192-3.095,9.519-1.515,11.291-1.451,13.746.555,27.492,1.6,41.238,2.284,5.421.277,10.693.533,15.837.661,4.034.129,8.026.171,12.06.193a2.841,2.841,0,0,1,1.963.49c1.665,1.473,1.516,5.038,1.9,7.044,1.238,6.425,2.156,12.914,2.86,19.4.918,8.367,1.494,16.158,2.156,23.244.32,3.544.683,6.916,1.046,10.1.235,1.985.512,3.906.747,5.763a1.607,1.607,0,0,1-1.644,1.815c-2.838-.171-7.854-.257-8.495-.278-3.714-.192-7.385-.363-11.1-.555-7.812-.491-15.624-.747-23.436-1.152-8.282-.342-16.819-.747-25.507-1.174Z" class="fill-current text-white"></path><path d="M135.485,150.424c-1.643,1.259-1.686,1.622.256.811s5.507-2.625,9.84-4.632a79.675,79.675,0,0,1,22.305-6.958l2.988-.384c2.071-.235,2.306-.513.192-.833a24.65,24.65,0,0,0-6.147-.042c-1.024.106-2.07.256-3.073.426a13.017,13.017,0,0,0-2.8.555,23.036,23.036,0,0,0-.277-8c-.768-3.564-1.878-5.08-2.092-3.607-.235,1.473.214,5.357.6,8.858.128,1.281.3,2.348.448,3.116a64.943,64.943,0,0,0-12.636,4.888,76.77,76.77,0,0,0-9.6,5.806Z" class="fill-current text-white"></path><path d="M83.9,144.981a7.826,7.826,0,0,1-5.657-2.5,9.132,9.132,0,0,1-2.219-4.355,5.817,5.817,0,0,1,1.3-5.144c2.518-2.71,7.641-2.924,10.565-.512a7.374,7.374,0,0,1,1.9,8.943,6.469,6.469,0,0,1-4.974,3.5,6.14,6.14,0,0,1-.917.064ZM76.788,138a8.349,8.349,0,0,0,2.006,3.992,7.062,7.062,0,0,0,5.955,2.2,5.69,5.69,0,0,0,4.4-3.095,6.642,6.642,0,0,0-1.707-8c-2.583-2.177-7.321-1.942-9.52.427A5.017,5.017,0,0,0,76.788,138Z" class="fill-current text-white"></path></svg></div><div><h1 class="subtitle text-lg text-primary">Postgres Playground</h1><h2 class="h1">Enhance your Postgres skills</h2><p class="body mt-4">Often times the gap in trying/learning something in Postgres is having a good tangible example. The playground makes that easier by loading a datasets then guiding you step by step through an exercise leveraging that dataset in a practical way. Whether it&#x27;s just the basics of interacting in the Postgres CLI with psql , improving your querying skills with SQL, or digging into performance analysis we want something for everyone to be able to level up your skills. Our guided tutorials focus on practical uses and examples as opposed to purely academic definitions.</p></div></div><ul class="grid md:grid-cols-2 gap-8 mt-20"><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">psql basics</p><p class="body mt-2">Never seen Postgres from the command line before? Start here! We’ve loaded a sample database in for you and you’re a superuser. </p><a href="/developers/playground/psql-basics"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Learn SQL</p><p class="body mt-2">Learn about the basics of SQL</p><a href="/developers/playground/learn-sql"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Joins in Postgres</p><p class="body mt-2">Learn about inner and outer joins in this tutorial</p><a href="/developers/playground/joins-in-postgres"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Indexing (B-Tree Indexes)</p><p class="body mt-2">Learn how to create a b-tree index in Postgres. No yardwork required!</p><a href="/developers/playground/btree-indexes"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Transactions</p><p class="body mt-2">Learn why and how to use transactions.</p><a href="/developers/playground/transactions"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Basics of PostGIS</p><p class="body mt-2">Test some sample spatial queries and functions with PostGIS!</p><a href="/developers/playground/basics-of-postgis"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Creating Tables</p><p class="body mt-2">Learn the basics of Postgres table creation, with primary keys, foreign keys, and data types.</p><a href="/developers/playground/postgres-tutorial-create-tables"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Row Level Security</p><p class="body mt-2">Learn how to use Postgres’ Row Level Security functionality. It’s a great tool for managing key-based partitioning in a multi-tenant world.</p><a href="/developers/playground/row-level-security"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Partitioning</p><p class="body mt-2">Learn how to create partitions with native Postgres and pg_partman with an IoT sample dataset. </p><a href="/developers/playground/partitioning"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Window Functions for Data Analysis</p><p class="body mt-2">Walk through sample Window functions with and without CTEs for running totals, rolling averages, first and last values, lag and lead, ranking, and ntiles. </p><a href="/developers/playground/postgres-window-functions-for-data-analysis"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Basics of JSON</p><p class="body mt-2">Learn JSON interactions including manipulating, querying, saving, and optimizing a simple object structure.</p><a href="/developers/playground/basics-of-jsonb"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">High level performance analysis</p><p class="body mt-2">A quick introduction to some of the most important Postgres performance metrics. Including cache hit ratio, index hit, and bloat. </p><a href="/developers/playground/high-level-performance-analytics"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Postgres Contraints </p><p class="body mt-2">This tutorial shows you how to create foreign keys, work with cascading deletes, not-null constraints, check constraints, and exclusion constraints. Also, examples for time-based check constraints and box based exclusion constraints. </p><a href="/developers/playground/postgres-constraints-tutorial"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Query performance analytics</p><p class="body mt-2">A tutorial for how to find your least performant queries and a lot more query performance information</p><a href="/developers/playground/query-performance-analytics"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Casting Data Types</p><p class="body mt-2">Learn about casting data types with in-depth examples for time intervals and date and time formats.</p><a href="/developers/playground/casting-data-types"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">CTEs and Window Functions</p><p class="body mt-2">Learn how to query data with US Birth data.</p><a href="/developers/playground/ctes-and-window-functions"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Materialized Views</p><p class="body mt-2">Create a basic materialized view using a sample ecommerce data set. </p><a href="/developers/playground/materialized-views"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Percentage Calculations</p><p class="body mt-2">Learn how to do percentage calculations in Postgres in one pass. </p><a href="/developers/playground/percentage-calculations"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Working with Time in Postgres</p><p class="body mt-2">A primer on working with time in Postgres. Covers data types, query formats, intervals, overlaps, indexing, and roll ups. </p><a href="/developers/playground/working-with-time-in-postgres"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Strings to Arrays</p><p class="body mt-2">Learn about the unnest(array) function and how to break about data from a csv in a csv. </p><a href="/developers/playground/strings-to-arrays"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Custom data types: DOMAINS</p><p class="body mt-2">Learn about user-defined datatypes, domain types, and how to create constraints that validate values.</p><a href="/developers/playground/custom-data-types-domains"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Custom data types : user defined types</p><p class="body mt-2">Hands on examples for composite types, enumerated types, and range types. </p><a href="/developers/playground/custom-data-types-user-defined"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Summaries with Aggregate Filters and Windows</p><p class="body mt-2">Aggregate filtering with window functions to strip out just the information you want</p><a href="/developers/playground/summaries-with-aggregate-filters-and-windows"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Using FILTER vs CTEs and CASE WHEN</p><p class="body mt-2">When aggregating based on status, try using FILTER instead of CASE statements.</p><a href="/developers/playground/using-filter-for-aggregation"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">SQL Tricks for More Effective CRUD</p><p class="body mt-2">A quick tutorial of some simple and not-so-simple CRUD - create, read, update, and delete. </p><a href="/developers/playground/sql-tricks-for-crud"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">LATERAL JOIN</p><p class="body mt-2">“This is a perfect scenario for a lateral join!” Have you ever heard that? If you were wondering “what’s a lateral join?” This will help. It’s pretty simple, but the combination of it with other SQL capabilities is quite powerful.</p><a href="/developers/playground/lateral-join"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">PostgreSQL - Just for Kids</p><p class="body mt-2">Intro to SQL tutorial for kids. This is a hands on tutorial using an existing Postgres database running in a web browser.</p><a href="/developers/playground/postgresql-for-kids"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 1</p><p class="body mt-2">We’re publishing a few days to do Advent of Code challenges in SQL. Day 1 makes use of sequences and sum over ranges. </p><a href="/developers/playground/2022-advent-of-code-sql-day-1"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 2</p><p class="body mt-2">SQL Solutions for Day 2 of Advent of Code. This one has some functions to find out who’s the winner of each battle and summing the wins. </p><a href="/developers/playground/2022-advent-of-code-sql-day-2"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 3</p><p class="body mt-2">SQL Solutions for Day 3 of Advent of Code. This one includes functions for length(), left(), right(), regexp_replace(), COLLATE commands, window function lag(), and more.</p><a href="/developers/playground/2022-advent-of-code-sql-day-3"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 4</p><p class="body mt-2">SQL Solutions for Day 4 of Advent of Code. This one includes the function split_part(), the int4range data type, and range operators.</p><a href="/developers/playground/2022-advent-of-code-sql-day-4"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 5</p><p class="body mt-2">SQL Solutions for Day 5 of Advent of Code. This one includes the function split_part(), the int4range data type, and range operators.</p><a href="/developers/playground/2022-advent-of-code-sql-day-5"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 6</p><p class="body mt-2">SQL Solutions for Day 6 of Advent of Code. This one includes regexp_split_to_table, strpos, lag() functions and COUNT(DISTINCT). Also, a great example of using a DO function with RAISE NOTICE.</p><a href="/developers/playground/2022-advent-of-code-sql-day-6"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 7</p><p class="body mt-2">SQL Solutions for Day 7 of Advent of Code. This one includes recursive queries, text arrays, and tons of Postgres functions. </p><a href="/developers/playground/2022-advent-of-code-sql-day-7"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 8</p><p class="body mt-2">SQL Solutions for Day 8 of Advent of Code. This one includes plpgsql, row_number window functions, sequences, and regexp_split_to_table.</p><a href="/developers/playground/2022-advent-of-code-sql-day-8"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 9</p><p class="body mt-2">SQL Solutions for Day 9 of Advent of Code. This one uses a custom function and colored ASCII art.</p><a href="/developers/playground/2022-advent-of-code-sql-day-9"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 10</p><p class="body mt-2">SQL Solutions for Day 10 of Advent of Code. This one uses sequences and the OVER() function.</p><a href="/developers/playground/2022-advent-of-code-sql-day-10"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 19</p><p class="body mt-2">SQL Solutions for Day 19 of Advent of Code. Featuring regep_split_to_array and recursive functions. These functions even have terminal animations!</p><a href="/developers/playground/2022-advent-of-code-sql-day-19"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 17</p><p class="body mt-2">SQL Solutions for Day 17 of Advent of Code. This one uses jsonb and arrays to keep track of points.</p><a href="/developers/playground/2022-advent-of-code-sql-day-17"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 16</p><p class="body mt-2">SQL Solutions for Day 16 of Advent of Code. This one calls a plpgsql function recursively.</p><a href="/developers/playground/2022-advent-of-code-sql-day-16"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 12</p><p class="body mt-2">Day 12 of AOC we have a SQL tutorial for the Hill Climbing Algorithm. This exercise uses parsing, an IDENTITY column, functions, and text arrays. </p><a href="/developers/playground/2022-advent-of-code-sql-day-12"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 11</p><p class="body mt-2">Day 11 of AOC we have new hands on SQL for playing Monkey in the Middle. This one uses sequences, string functions, and window functions.</p><a href="/developers/playground/2022-advent-of-code-sql-day-11"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 13</p><p class="body mt-2">Day 13 of AOC. This exercise has sequencing, regexp_replace(), lag(), and overlay().</p><a href="/developers/playground/2022-advent-of-code-sql-day-13"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 15</p><p class="body mt-2">Day 15 of AOC. This one has examples for CTEs, sequences, int4range, range_agg(), regexp_substr() / regexp_match(), and UPSERT.</p><a href="/developers/playground/2022-advent-of-code-sql-day-15"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 14</p><p class="body mt-2">Day 14 of AOC. Join in for exercises on lag() functions, sequences, string_to_table(), split_part(), and generate_series().</p><a href="/developers/playground/2022-advent-of-code-sql-day-14"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Postgres Functions for Rolling Up Data by Date</p><p class="body mt-2">Sample code and tutorial for using Postgres intervals, date_trunc, rollup, cube and formatting output with to_char.</p><a href="/developers/playground/postgres-date-functions"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Postgres Users and Roles</p><p class="body mt-2">Learn about creating Postgres user roles, role groups, and login and password details for users.</p><a href="/developers/playground/postgres-users-and-roles"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">psql Echo Commands</p><p class="body mt-2">Learn about -E, -echo-hidden, -e, -echo-queries in the Postgres command line interface, psql</p><a href="/developers/playground/psql-echo-commands"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Working with Money in Postgres</p><p class="body mt-2">A primer for working with money in Postgres including what data type to choose, storing currency, and some sample functions. </p><a href="/developers/playground/working-with-money-in-postgres"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Advent of Code - Day 18</p><p class="body mt-2">Day 18 of AOC we have new hands on SQL for the Boiling Boulders puzzle. This one uses sequences, a recursive CTE, and the plpgsql language.</p><a href="/developers/playground/2022-advent-of-code-sql-day-18"><span class="absolute inset-0"></span></a></li><li class="rounded-lg p-6 border border-gray-700 hover:shadow-xl transition hover:border-primary relative"><p class="h4">Tags and Postgres Arrays, a Purrrfect Combination</p><p class="body mt-2">Review some of the ways to store tags in a database from basic relational models to text arrays. This tutorial has data models, performance tests, sample queries, and guidance on choosing the best path. </p><a href="/developers/playground/tags-and-postgres-arrays"><span class="absolute inset-0"></span></a></li></ul></section></div></div></div><footer class="relative bg-slate-950 text-[13px] font-[450] text-blue-100/70 tracking-normal"><div class="absolute inset-0 overflow-hidden pointer-events-none"><svg width="2000" height="3025" viewBox="0 0 1440 3025" fill="none" preserveAspectRatio="none" class="absolute left-0 top-full -translate-y-1/2 [filter:url(#noise-spicy)]"><g filter="url(#footer-filter-:Rh9p:)"><path d="M1766.06 466.544C1766.06 466.544 1766.06 1439.41 720.112 1512.49C-325.835 1585.57 -325.835 2558.44 -325.835 2558.44" stroke="url(#footer-radial-:Rh9p:)" stroke-width="300"></path></g><defs><filter id="footer-filter-:Rh9p:" x="-628.533" y="345.68" width="2697.29" height="2333.62" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur stdDeviation="60" result="effect1_foregroundBlur_458_1273"></feGaussianBlur></filter><filter id="filter_01_footer" x="-520.532" y="453.68" width="2481.29" height="2117.62" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur stdDeviation="6" result="effect1_foregroundBlur_458_1273"></feGaussianBlur></filter><radialGradient id="footer-radial-:Rh9p:" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(838.866 1718.03) rotate(-90) scale(1338.26 1283.46)"><stop offset="0.0479167" stop-color="#2D68FF" stop-opacity="0.50"></stop><stop offset="0.846416" stop-color="#2563EB" stop-opacity="0"></stop></radialGradient></defs></svg></div><div class="relative max-w-7xl mx-auto py-12 px-4 sm:px-6 lg:py-16 lg:px-8"><div class="grid sm:grid-cols-2 lg:flex items-start gap-x-20 gap-y-12 justify-between"><dl><dt class="font-[550] text-blue-500">Products</dt><dd role="list" class="mt-4 grid gap-y-2"><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-high-availability-postgresql">Crunchy Postgres</a><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-postgresql-for-kubernetes">Crunchy Postgres for Kubernetes</a><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-bridge">Crunchy Bridge</a><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-certified-postgresql">Crunchy Certified PostgreSQL</a><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-postgresql-for-cloud-foundry">Crunchy PostgreSQL for Cloud Foundry</a><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-mls-postgresql">Crunchy MLS PostgreSQL</a><a class="hocus:text-white transition-colors truncate" href="/products/crunchy-spatial">Crunchy Spatial</a></dd></dl><dl><dt class="font-[550] text-blue-500">Services &amp; Support</dt><dd role="list" class="mt-4 grid gap-y-2"><a class="hocus:text-white transition-colors truncate" href="/solutions/enterprise-postgresql-support">Enterprise PostgreSQL Support</a><a class="hocus:text-white transition-colors truncate" href="/migrate-from-heroku">Migrate from Heroku</a><a class="hocus:text-white transition-colors truncate" href="/solutions/ansible">Ansible</a><a class="hocus:text-white transition-colors truncate" href="/red-hat-certified-technologies">Red Hat Partner</a><a class="hocus:text-white transition-colors truncate" href="/about/postgresql-enterprise-database">Trusted PostgreSQL</a><a class="hocus:text-white transition-colors truncate" href="/about/value-of-subscription">Crunchy Data Subscription</a></dd></dl><dl><dt class="font-[550] text-blue-500">Resources</dt><dd role="list" class="mt-4 grid gap-y-2"><a class="hocus:text-white transition-colors truncate" href="https://access.crunchydata.com">Customer Portal</a><a class="hocus:text-white transition-colors truncate" href="https://access.crunchydata.com/documentation/">Documentation</a><a class="hocus:text-white transition-colors truncate" href="/developers/tutorials">Postgres Tutorials</a><a class="hocus:text-white transition-colors truncate" href="/developers/get-started/fully-managed-postgres">Crunchy Bridge Walkthrough</a><a class="hocus:text-white transition-colors truncate" href="/developers/get-started/postgres-operator">Postgres Operator Walkthrough</a><a class="hocus:text-white transition-colors truncate" href="/blog">Blog</a><a class="hocus:text-white transition-colors truncate" href="/events">Events</a></dd></dl><dl><dt class="font-[550] text-blue-500">Company</dt><dd role="list" class="mt-4 grid gap-y-2"><a class="hocus:text-white transition-colors truncate" href="/about">About</a><a class="hocus:text-white transition-colors truncate" href="/team">Team</a><a class="hocus:text-white transition-colors truncate" href="/news">News</a><a class="hocus:text-white transition-colors truncate" href="/careers">Careers</a><a class="hocus:text-white transition-colors truncate" href="/contact">Contact Us</a><a class="hocus:text-white transition-colors truncate" href="/newsletter">Newsletter</a><a class="hocus:text-white transition-colors truncate" href="/branding">Branding</a><a class="hocus:text-white transition-colors truncate" href="/security">Security</a><a class="hocus:text-white transition-colors truncate" href="/developers/data-collection-notice">Data Collection</a></dd></dl></div><div class="mt-16 grid sm:grid-cols-2 lg:flex justify-between lg:items-end flex-wrap gap-x-20 gap-y-12"><div><p class="max-w-72 text-xs text-balance"><span class="text-blue-500 font-[550]">Subscribe to the Crunchy Data Newsletter</span> <!-- -->and receive Postgres content every month.</p><form method="post" action="/newsletter" class="mt-6 sm:flex"><input type="hidden" name="csrf" value="4ef7b575c59909836eb81d69db18b08de242cf7fea209f72a5147c39771b2935aba8d16d340974063aaff574fcb096302ba58d9a85ec382b6fe22b7b3ed654894c1adebcf23aa2786a4f5ccd69eded609f663f91dfb4d952e4261154a8b8072a0adae6b1"/><label class="hidden">Do not fill this out please:<!-- --> <input type="text" name="favorite-ice-cream"/></label><label class="hidden">Do not fill this out please, it will be pre-filled:<!-- --> <input type="text" name="favorite-relational-database" value=""/></label><input type="hidden" name="form-loaded-at" value="1740866188205"/><input type="hidden" name="source_url" value="/developers/tutorials"/><div class="sm:flex-row flex flex-col gap-4"><div class="min-w-0 flex-1"><label for="email_:R9lh9p:" class="sr-only">Email address</label><input id="email_:R9lh9p:" type="email" name="email" autoComplete="email" class="w-full min-w-0 rounded-lg bg-blue-100/10 px-3.5 py-1.5 text-[13px] text-white border-blue-100/10 hover:border-blue-100/25 focus:border-blue-500/75 sm:w-40 transition-all focus:ring-[3px] focus:ring-blue-500/25 !outline-none" pattern="[^@]+@[^@]+\.[a-zA-Z]{2,}" placeholder="Enter your email" aria-invalid="false"/></div><div class="sm:w-auto sm:grow-0 w-full"><button type="submit" class="button-primary-sm px-3.5 py-2 h-[38px] border-blue-500/50 hocus:border-blue-500/75 after:hidden sm:-ml-1.5"><span class="relative">Subscribe</span></button></div></div><div id="form-error-message"></div></form></div><p class="order-last col-span-full sm:text-center lg:order-none text-[11px] lg:absolute lg:left-1/2 lg:-translate-x-1/2">© 2018-<!-- -->2025<!-- --> Crunchy Data Solutions, Inc.</p><div class="flex flex-col lg:items-end"><div class="flex gap-4 -mr-1 -mt-1"><a href="https://www.youtube.com/c/CrunchyDataPostgres" class="hocus:text-white transition-colors p-1"><span class="sr-only">YouTube</span><svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" class="size-4.5"><path fill-rule="evenodd" d="M22.061 6.945a2.629 2.629 0 00-1.856-1.856C18.567 4.65 12 4.65 12 4.65s-6.567 0-8.205.439a2.629 2.629 0 00-1.856 1.856C1.5 8.583 1.5 12 1.5 12s0 3.417.439 5.054a2.628 2.628 0 001.856 1.857c1.638.439 8.205.439 8.205.439s6.567 0 8.205-.439a2.628 2.628 0 001.856-1.857C22.5 15.417 22.5 12 22.5 12s0-3.417-.439-5.055zM9.9 15.15v-6.3L15.356 12 9.9 15.15z" clip-rule="evenodd"></path></svg></a><a href="https://www.linkedin.com/company/crunchy-data-solutions-inc-" class="hocus:text-white transition-colors p-1"><span class="sr-only">LinkedIn</span><svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" class="size-4.5"><path fill-rule="evenodd" d="M6.753 20.766h-3.94V8.081h3.94v12.685zM4.781 6.351c-1.26 0-2.281-1.044-2.281-2.303a2.304 2.304 0 012.281-2.282 2.303 2.303 0 012.282 2.282c0 1.259-1.022 2.303-2.282 2.303zM21.5 20.766h-3.935v-6.175c0-1.472-.029-3.359-2.048-3.359-2.048 0-2.362 1.599-2.362 3.253v6.281H9.22V8.081h3.778v1.731h.056c.525-.998 1.81-2.05 3.726-2.05 3.988 0 4.72 2.626 4.72 6.036v6.968z" clip-rule="evenodd"></path></svg></a><a href="https://twitter.com/crunchydata" class="hocus:text-white transition-colors p-1"><span class="sr-only">X</span><svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" class="size-4.5"><path d="M13.6823 10.6218L20.2391 3H18.6854L12.9921 9.61788L8.44486 3H3.2002L10.0765 13.0074L3.2002 21H4.75404L10.7663 14.0113L15.5685 21H20.8131L13.6819 10.6218H13.6823ZM11.5541 13.0956L10.8574 12.0991L5.31391 4.16971H7.70053L12.1742 10.5689L12.8709 11.5655L18.6861 19.8835H16.2995L11.5541 13.096V13.0956Z"></path></svg></a><a href="https://github.com/CrunchyData" class="hocus:text-white transition-colors p-1"><span class="sr-only">GitHub</span><svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" class="size-4.5"><path fill-rule="evenodd" d="M22 12.925c0 1.329-.133 2.737-.729 3.958C19.692 20.075 15.35 20 12.242 20c-3.159 0-7.759.112-9.4-3.117C2.233 15.675 2 14.254 2 12.925c0-1.746.579-3.396 1.729-4.734a6.51 6.51 0 01-.321-2.033c0-.896.204-1.346.609-2.158 1.887 0 3.095.375 4.533 1.5a15.932 15.932 0 013.696-.417c1.125 0 2.258.121 3.35.383C17.013 4.354 18.221 4 20.088 4c.408.812.608 1.262.608 2.158 0 .683-.108 1.363-.321 2.008C21.521 9.516 22 11.179 22 12.925z"></path></svg></a></div></div></div></div></footer></div><div id="cookiesAlert" style="z-index:2000" class="fixed bottom-0 left-0 w-full flex justify-between items-center bg-gradient text-white invert-color py-2 px-4" role="alert"><p class="body">This site uses cookies for usage analytics to improve our service. By continuing to browse this site, you agree to this use. See our <a href="/privacy">privacy policy</a> to learn more.</p><form method="post" action="/?redirectTo=https%3A%2F%2Fwww.crunchydata.com%2Fdevelopers%2Ftutorials"><input type="hidden" name="acknowledged" value="true"/><button type="submit" class="p-1 hover:bg-white hover:bg-opacity-10 rounded" aria-label="Close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="w-5 h-5"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button></form></div><script>((STORAGE_KEY, restoreKey) => { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, ""); } try { let positions = JSON.parse(sessionStorage.getItem(STORAGE_KEY) || "{}"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === "number") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(STORAGE_KEY); } })("positions", null)</script><script src="https://link.crunchydata.com/cd.js"></script><script type="text/javascript" id="hs-script-loader" async="" defer="" src="https://js.hs-scripts.com/2283855.js"></script><script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-92590099-1"></script><script id="gtag-init"> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-92590099-1', { page_path: window.location.pathname }); </script><script>window.ENV = {"SENTRY_DSN":"https://559dc1e9c3fb4e0c975085672c7cab7d@o433451.ingest.sentry.io/6653378"}</script><link rel="modulepreload" href="/build/entry.client-DNLNFP27.js"/><link rel="modulepreload" href="/build/_shared/chunk-TCLGSVZV.js"/><link rel="modulepreload" href="/build/_shared/chunk-SCPVB2C3.js"/><link rel="modulepreload" href="/build/_shared/chunk-R5E7U4V6.js"/><link rel="modulepreload" href="/build/_shared/chunk-CKGZT7DU.js"/><link rel="modulepreload" href="/build/_shared/chunk-E5ZSF32D.js"/><link rel="modulepreload" href="/build/_shared/chunk-MVES7OWQ.js"/><link rel="modulepreload" href="/build/_shared/chunk-SQO6Y7LN.js"/><link rel="modulepreload" href="/build/_shared/chunk-HDHVBSWO.js"/><link rel="modulepreload" href="/build/_shared/chunk-ASHQKMRQ.js"/><link rel="modulepreload" href="/build/_shared/chunk-DRSE3CTB.js"/><link rel="modulepreload" href="/build/_shared/chunk-CF2UHLZU.js"/><link rel="modulepreload" href="/build/_shared/chunk-S3UTQVRD.js"/><link rel="modulepreload" href="/build/_shared/chunk-LSEESZC2.js"/><link rel="modulepreload" href="/build/_shared/chunk-WV5TGDCL.js"/><link rel="modulepreload" href="/build/_shared/chunk-IV5M4NBL.js"/><link rel="modulepreload" href="/build/_shared/chunk-VBCR3HLH.js"/><link rel="modulepreload" href="/build/_shared/chunk-5LDDUBXY.js"/><link rel="modulepreload" href="/build/root-IFB3O6XU.js"/><link rel="modulepreload" href="/build/_shared/chunk-QAF2GV3M.js"/><link rel="modulepreload" href="/build/_shared/chunk-JZ33HRWW.js"/><link rel="modulepreload" href="/build/routes/developers-US4DTEXN.js"/><link rel="modulepreload" href="/build/_shared/chunk-N2KCTWJH.js"/><link rel="modulepreload" href="/build/_shared/chunk-TBAP37XV.js"/><link rel="modulepreload" href="/build/_shared/chunk-74KVKBNK.js"/><link rel="modulepreload" href="/build/_shared/chunk-I2ET5AXY.js"/><link rel="modulepreload" href="/build/routes/developers/tutorials-24Q5WWO3.js"/><script>window.__remixContext = {"url":"/developers/tutorials","state":{"loaderData":{"root":{"domain":"https://www.crunchydata.com","canonicalUrl":"https://www.crunchydata.com/developers/tutorials","expectedUrl":"https://www.crunchydata.com/developers/tutorials","anonId":"qahdstupdetrjqqsvcjhjijilbgofylzcyeonkyku","csrf":"4ef7b575c59909836eb81d69db18b08de242cf7fea209f72a5147c39771b2935aba8d16d340974063aaff574fcb096302ba58d9a85ec382b6fe22b7b3ed654894c1adebcf23aa2786a4f5ccd69eded609f663f91dfb4d952e4261154a8b8072a0adae6b1","acknowledged":false,"loadScripts":true,"ENV":{"SENTRY_DSN":"https://559dc1e9c3fb4e0c975085672c7cab7d@o433451.ingest.sentry.io/6653378"},"sentryTrace":"4365ed7672cf42be81e999845ea1eeb3-9868d5cf8c5c0646-0","sentryBaggage":"sentry-environment=production,sentry-public_key=559dc1e9c3fb4e0c975085672c7cab7d,sentry-trace_id=4365ed7672cf42be81e999845ea1eeb3,sentry-sample_rate=0.05,sentry-transaction=routes%2Fdevelopers%2Ftutorials,sentry-sampled=false","remixVersion":1},"routes/developers/tutorials":{"tutorials":[{"description":"Never seen Postgres from the command line before? Start here! We’ve loaded a sample database in for you and you’re a superuser. ","slug":"psql-basics","title":"psql basics"},{"description":"Learn about the basics of SQL","slug":"learn-sql","title":"Learn SQL"},{"description":"Learn about inner and outer joins in this tutorial","slug":"joins-in-postgres","title":"Joins in Postgres"},{"description":"Learn how to create a b-tree index in Postgres. No yardwork required!","slug":"btree-indexes","title":"Indexing (B-Tree Indexes)"},{"description":"Learn why and how to use transactions.","slug":"transactions","title":"Transactions"},{"description":"Test some sample spatial queries and functions with PostGIS!","slug":"basics-of-postgis","title":"Basics of PostGIS"},{"description":"Learn the basics of Postgres table creation, with primary keys, foreign keys, and data types.","slug":"postgres-tutorial-create-tables","title":"Creating Tables"},{"description":"Learn how to use Postgres’ Row Level Security functionality. It’s a great tool for managing key-based partitioning in a multi-tenant world.","slug":"row-level-security","title":"Row Level Security"},{"description":"Learn how to create partitions with native Postgres and pg_partman with an IoT sample dataset. ","slug":"partitioning","title":"Partitioning"},{"description":"Walk through sample Window functions with and without CTEs for running totals, rolling averages, first and last values, lag and lead, ranking, and ntiles. ","slug":"postgres-window-functions-for-data-analysis","title":"Window Functions for Data Analysis"},{"description":"Learn JSON interactions including manipulating, querying, saving, and optimizing a simple object structure.","slug":"basics-of-jsonb","title":"Basics of JSON"},{"description":"A quick introduction to some of the most important Postgres performance metrics. Including cache hit ratio, index hit, and bloat. ","slug":"high-level-performance-analytics","title":"High level performance analysis"},{"description":"This tutorial shows you how to create foreign keys, work with cascading deletes, not-null constraints, check constraints, and exclusion constraints. Also, examples for time-based check constraints and box based exclusion constraints. ","slug":"postgres-constraints-tutorial","title":"Postgres Contraints "},{"description":"A tutorial for how to find your least performant queries and a lot more query performance information","slug":"query-performance-analytics","title":"Query performance analytics"},{"description":"Learn about casting data types with in-depth examples for time intervals and date and time formats.","slug":"casting-data-types","title":"Casting Data Types"},{"description":"Learn how to query data with US Birth data.","slug":"ctes-and-window-functions","title":"CTEs and Window Functions"},{"description":"Create a basic materialized view using a sample ecommerce data set. ","slug":"materialized-views","title":"Materialized Views"},{"description":"Learn how to do percentage calculations in Postgres in one pass. ","slug":"percentage-calculations","title":"Percentage Calculations"},{"description":"A primer on working with time in Postgres. Covers data types, query formats, intervals, overlaps, indexing, and roll ups. ","slug":"working-with-time-in-postgres","title":"Working with Time in Postgres"},{"description":"Learn about the unnest(array) function and how to break about data from a csv in a csv. ","slug":"strings-to-arrays","title":"Strings to Arrays"},{"description":"Learn about user-defined datatypes, domain types, and how to create constraints that validate values.","slug":"custom-data-types-domains","title":"Custom data types: DOMAINS"},{"description":"Hands on examples for composite types, enumerated types, and range types. ","slug":"custom-data-types-user-defined","title":"Custom data types : user defined types"},{"description":"Aggregate filtering with window functions to strip out just the information you want","slug":"summaries-with-aggregate-filters-and-windows","title":"Summaries with Aggregate Filters and Windows"},{"description":"When aggregating based on status, try using FILTER instead of CASE statements.","slug":"using-filter-for-aggregation","title":"Using FILTER vs CTEs and CASE WHEN"},{"description":"A quick tutorial of some simple and not-so-simple CRUD - create, read, update, and delete. ","slug":"sql-tricks-for-crud","title":"SQL Tricks for More Effective CRUD"},{"description":"“This is a perfect scenario for a lateral join!” Have you ever heard that? If you were wondering “what’s a lateral join?” This will help. It’s pretty simple, but the combination of it with other SQL capabilities is quite powerful.","slug":"lateral-join","title":"LATERAL JOIN"},{"description":"Intro to SQL tutorial for kids. This is a hands on tutorial using an existing Postgres database running in a web browser.","slug":"postgresql-for-kids","title":"PostgreSQL - Just for Kids"},{"description":"We’re publishing a few days to do Advent of Code challenges in SQL. Day 1 makes use of sequences and sum over ranges. ","slug":"2022-advent-of-code-sql-day-1","title":"Advent of Code - Day 1"},{"description":"SQL Solutions for Day 2 of Advent of Code. This one has some functions to find out who’s the winner of each battle and summing the wins. ","slug":"2022-advent-of-code-sql-day-2","title":"Advent of Code - Day 2"},{"description":"SQL Solutions for Day 3 of Advent of Code. This one includes functions for length(), left(), right(), regexp_replace(), COLLATE commands, window function lag(), and more.","slug":"2022-advent-of-code-sql-day-3","title":"Advent of Code - Day 3"},{"description":"SQL Solutions for Day 4 of Advent of Code. This one includes the function split_part(), the int4range data type, and range operators.","slug":"2022-advent-of-code-sql-day-4","title":"Advent of Code - Day 4"},{"description":"SQL Solutions for Day 5 of Advent of Code. This one includes the function split_part(), the int4range data type, and range operators.","slug":"2022-advent-of-code-sql-day-5","title":"Advent of Code - Day 5"},{"description":"SQL Solutions for Day 6 of Advent of Code. This one includes regexp_split_to_table, strpos, lag() functions and COUNT(DISTINCT).\nAlso, a great example of using a DO function with RAISE NOTICE.","slug":"2022-advent-of-code-sql-day-6","title":"Advent of Code - Day 6"},{"description":"SQL Solutions for Day 7 of Advent of Code. This one includes recursive queries, text arrays, and tons of Postgres functions. ","slug":"2022-advent-of-code-sql-day-7","title":"Advent of Code - Day 7"},{"description":"SQL Solutions for Day 8 of Advent of Code. This one includes plpgsql, row_number window functions, sequences, and regexp_split_to_table.","slug":"2022-advent-of-code-sql-day-8","title":"Advent of Code - Day 8"},{"description":"SQL Solutions for Day 9 of Advent of Code. This one uses a custom function and colored ASCII art.","slug":"2022-advent-of-code-sql-day-9","title":"Advent of Code - Day 9"},{"description":"SQL Solutions for Day 10 of Advent of Code. This one uses sequences and the OVER() function.","slug":"2022-advent-of-code-sql-day-10","title":"Advent of Code - Day 10"},{"description":"SQL Solutions for Day 19 of Advent of Code. Featuring regep_split_to_array and recursive functions. These functions even have terminal animations!","slug":"2022-advent-of-code-sql-day-19","title":"Advent of Code - Day 19"},{"description":"SQL Solutions for Day 17 of Advent of Code. This one uses jsonb and arrays to keep track of points.","slug":"2022-advent-of-code-sql-day-17","title":"Advent of Code - Day 17"},{"description":"SQL Solutions for Day 16 of Advent of Code. This one calls a plpgsql function recursively.","slug":"2022-advent-of-code-sql-day-16","title":"Advent of Code - Day 16"},{"description":"Day 12 of AOC we have a SQL tutorial for the Hill Climbing Algorithm. This exercise uses parsing, an IDENTITY column, functions, and text arrays. ","slug":"2022-advent-of-code-sql-day-12","title":"Advent of Code - Day 12"},{"description":"Day 11 of AOC we have new hands on SQL for playing Monkey in the Middle. This one uses sequences, string functions, and window functions.","slug":"2022-advent-of-code-sql-day-11","title":"Advent of Code - Day 11"},{"description":"Day 13 of AOC. This exercise has sequencing, regexp_replace(), lag(), and overlay().","slug":"2022-advent-of-code-sql-day-13","title":"Advent of Code - Day 13"},{"description":"Day 15 of AOC. This one has examples for CTEs, sequences, int4range, range_agg(), regexp_substr() / regexp_match(), and UPSERT.","slug":"2022-advent-of-code-sql-day-15","title":"Advent of Code - Day 15"},{"description":"Day 14 of AOC. Join in for exercises on lag() functions, sequences, string_to_table(), split_part(), and generate_series().","slug":"2022-advent-of-code-sql-day-14","title":"Advent of Code - Day 14"},{"description":"Sample code and tutorial for using Postgres intervals, date_trunc, rollup, cube and formatting output with to_char.","slug":"postgres-date-functions","title":"Postgres Functions for Rolling Up Data by Date"},{"description":"Learn about creating Postgres user roles, role groups, and login and password details for users.","slug":"postgres-users-and-roles","title":"Postgres Users and Roles"},{"description":"Learn about -E, -echo-hidden, -e, -echo-queries in the Postgres command line interface, psql","slug":"psql-echo-commands","title":"psql Echo Commands"},{"description":"A primer for working with money in Postgres including what data type to choose, storing currency, and some sample functions. ","slug":"working-with-money-in-postgres","title":"Working with Money in Postgres"},{"description":"Day 18 of AOC we have new hands on SQL for the Boiling Boulders puzzle. This one uses sequences, a recursive CTE, and the plpgsql language.","slug":"2022-advent-of-code-sql-day-18","title":"Advent of Code - Day 18"},{"description":"Review some of the ways to store tags in a database from\nbasic relational models to text arrays. This tutorial has data models, performance tests, sample queries, and guidance on choosing the best path. ","slug":"tags-and-postgres-arrays","title":"Tags and Postgres Arrays, a Purrrfect Combination"}]},"routes/developers":null},"actionData":null,"errors":null},"future":{"v2_dev":false,"unstable_postcss":false,"unstable_tailwind":false,"v2_errorBoundary":false,"v2_headers":false,"v2_meta":true,"v2_normalizeFormMethod":false,"v2_routeConvention":false}};</script><script type="module" async="">import "/build/manifest-A43C69B9.js"; import * as route0 from "/build/root-IFB3O6XU.js"; import * as route1 from "/build/routes/developers-US4DTEXN.js"; import * as route2 from "/build/routes/developers/tutorials-24Q5WWO3.js"; window.__remixRouteModules = {"root":route0,"routes/developers":route1,"routes/developers/tutorials":route2}; import("/build/entry.client-DNLNFP27.js");</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10