Slide 1

Slide 1 text

Postgres à la carte Postgres à la carte: dynamic container images with your choice of extensions Álvaro Hernández @ahachete

Slide 2

Slide 2 text

Postgres à la carte @ahachete ` whoami ` Alvaro Hernandez aht.es ● Founder & CEO, OnGres ● 20+ years Postgres user and DBA ● Mostly doing R&D to create new, innovative software on Postgres ● More than 140 tech talks, most about Postgres ● Founder and President of the NPO Fundación PostgreSQL ● AWS Data Hero

Slide 3

Slide 3 text

Postgres à la carte Running Postgres on containers

Slide 4

Slide 4 text

Postgres à la carte @ahachete It’s as simple as it gets… $ docker run -d -e POSTGRES_PASSWORD=42 -p5432:5432 \ postgres (Docker’s official image)

Slide 5

Slide 5 text

Postgres à la carte …until you want what everybody wants:

Slide 6

Slide 6 text

Postgres à la carte @ahachete Extensions, extensions, extensions https://www.youtube.com/watch?v=EMldOiiG1Ko

Slide 7

Slide 7 text

Postgres à la carte @ahachete No worries, I’ll derive my own container image!

Slide 8

Slide 8 text

Postgres à la carte @ahachete No worries, I’ll derive my own container image! ● Dozens of extensions come bundled with Docker’s official base image, whether you want them or not. ● Adding more extensions typically means: ○ Compiling from source ○ Adding additional packages/libraries ○ Knowing how to compile, package and clean build code/artifacts ● Now you have become a container image maintainer! ○ Updates are on you ○ Security is on you

Slide 9

Slide 9 text

Postgres à la carte Call for Postgres + Extensions Distributions (specially on/for containers)

Slide 10

Slide 10 text

Postgres à la carte @ahachete Let’s pack extensions as OCI images! Why Postgres Extensions should be packaged and distributed as OCI images

Slide 11

Slide 11 text

Postgres à la carte Different options for packaging extensions within containers

Slide 12

Slide 12 text

Postgres à la carte @ahachete Option 1: the fatty container ● Size ● Security ● Restarts (downtime)

Slide 13

Slide 13 text

Postgres à la carte @ahachete Option 2: dynamically inject into container ● Security ● Startup time ● Approach followed in StackGres See https://aht.es/#talks-postgres_extensions_in_kubernetes

Slide 14

Slide 14 text

Postgres à la carte Option 3: dynamically generate container images

Slide 15

Slide 15 text

Postgres à la carte @ahachete Option 3: dynamically generate container images Formula to compute all possible number of images, considering n extensions to choose from

Slide 16

Slide 16 text

Postgres à la carte @ahachete Option 3: dynamically generate container images Formula to compute all possible number of images, considering n extensions to choose from

Slide 17

Slide 17 text

Postgres à la carte @ahachete Option 3: dynamically generate container images Formula to compute all possible number of images, considering n extensions to choose from is bigger than

Slide 18

Slide 18 text

Postgres à la carte @ahachete Option 3: dynamically generate container images Option 3: dynamically generate container images n=10 → 252 n=200 → 9.05485146561032811654E+58

Slide 19

Slide 19 text

Postgres à la carte @ahachete Option 3: dynamically generate container images DEMO

Slide 20

Slide 20 text

Postgres à la carte @ahachete Option 3: dynamically generate container images

Slide 21

Slide 21 text

Postgres à la carte @ahachete With a Web UI to construct the “URLs”

Slide 22

Slide 22 text

Postgres à la carte How does it work?

Slide 23

Slide 23 text

Postgres à la carte @ahachete How does it work? Credit: https://github.com /sudo-bmitch/pres entations/blob/mai n/oci-refers/img/o ci-image.png

Slide 24

Slide 24 text

Postgres à la carte @ahachete DOCIR: Dynamic OCI Registry ● A new, from scratch, OCI Registry following the official specs. ● Instead of serving static images, composes dynamic images on the fly: ○ Adding (pre-existing) layers on-demand ○ Generating dynamic manifests (index, image manifest, config) ● Dynamic business logic is custom: you decide how to compose layers ● Postgres specific version leverages image metadata to determine how to compose layers

Slide 25

Slide 25 text

Postgres à la carte @ahachete DOCIR: metadata name | pga/extension/cube-16.4 reference | 10-linux-amd64 id | 6179 digest | sha256:fe19652abbbe1fb4a1d87d668657ef3758a96441403dad43fd002c8bd3267d48 arch | amd64 arch_variant | os | linux title | cube 16.4 description | cube v16.4 for PostgreSQL 16.4 ... custom_labels | {"sh.pga.containers.type": "extension", "sh.pga.containers.homeURL": "https://postgresql.org", "sh.pga.containers.component.name": "cube", "sh.pga.containers.repository.tag": "REL_16_4", "sh.pga.containers.repository.url": "https://git.postgresql.org/git/postgresql.git", "sh.pga.containers.metadataVersion": "v1beta1", "sh.pga.containers.description.long": "Extension cube v16.4 for PostgreSQL 16.4", "sh.pga.containers.extension.flavor": "postgres", "sh.pga.containers.extensions.cube.tags": "contrib", "sh.pga.containers.extension.flavorVersion": "16.4", "sh.pga.containers.extensions.cube.install": "true", "sh.pga.containers.extensions.cube.trusted": "true", "sh.pga.containers.repository.commitDigest": "REL_16_4", "sh.pga.containers.extension.flavor.version": "16.4", "sh.pga.containers.extensions.cube.categories": "extension"}

Slide 26

Slide 26 text

Postgres à la carte @ahachete DOCIR: metadata

Slide 27

Slide 27 text

Postgres à la carte @ahachete Next steps ● New release of image “layers” coming soon. ● (Re)define metadata format. Integrate with PGXN v2 ? ● Publish the website for container selection and REST API ● Publish DOCIR as open source ● Call for extension authors to join!

Slide 28

Slide 28 text

Postgres à la carte @ahachete Don’t miss “Reproducible Postgres” on Wed

Slide 29

Slide 29 text

Postgres à la carte Q & A