Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whZ4w-000Icx-2Y for pgsql-announce@arkaria.postgresql.org; Wed, 08 Jul 2026 20:41:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whZ4v-009F0q-0g for pgsql-announce@arkaria.postgresql.org; Wed, 08 Jul 2026 20:41:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whZ4u-009F0i-1O for pgsql-announce@lists.postgresql.org; Wed, 08 Jul 2026 20:41:09 +0000 Received: from mahout.postgresql.org ([2001:4800:3e1:1::227]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1whZ4r-00000000LFL-2LB4 for pgsql-announce@lists.postgresql.org; Wed, 08 Jul 2026 20:41:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Message-ID:Date:Reply-To:From:To:Subject: MIME-Version:Content-Type:Sender:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=5vGI8RP976yb8GkhK/q5Mb8Krw9qIA/djJH3nmfRmto=; b=w/DBojVBeH53njnMqy2YLxhCnN 5ta+auzog9Pk0wsB3S7ZlaLAij9utX4MUusZM5hT6lbConX/vKrbHRfHEkq2mNN/TsQCG8+4LUmEO +vFGJYeLZ7+EWbPNYHQRXTeQDyc2JGXLe7g88G8bVGkabp6NmAXnBe6U7xVA5mcR/7Yj7yf+D7AfU Wt3JxF8SVSU8K2BoXgqr9DdhmDx9ThaT2LzIDGgPg7oTbLSFC98xgA3CRGVfc5zkAajOcaCxJFpfZ EUk5vlh9AURuNTuWUIEZzOM3CcwpZR6JgHqYGUgxUKEWuu9B0m+TsXcPj1fM6vpo5wFnd30hqMuA5 WWjL7VhQ==; Received: from wrigleys.postgresql.org ([2a02:16a8:dc51::60]) by mahout.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whZ4q-000irO-14 for pgsql-announce@lists.postgresql.org; Wed, 08 Jul 2026 20:41:05 +0000 Received: from localhost ([127.0.0.1] helo=wrigleys.postgresql.org) by wrigleys.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whZ4n-001keA-3D for pgsql-announce@lists.postgresql.org; Wed, 08 Jul 2026 20:41:03 +0000 Content-Type: multipart/alternative; boundary="===============7650768556197276411==" MIME-Version: 1.0 Subject: pglayers: PostgreSQL extensions as stackable Docker layers To: PostgreSQL Announce From: pglayers via PostgreSQL Announce Reply-To: iemejia@gmail.com Date: Wed, 08 Jul 2026 20:40:51 +0000 Message-ID: <178354325130.73866.15171162984104212031@wrigleys.postgresql.org> X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-pglister-tags: related X-pglister-tagsig: 49a20e5120a07d8d5f51b9b7143332420380313a33a4f743eb9525e2768735f3 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============7650768556197276411== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable # =F0=9F=9A=80 Announcing **pglayers** **Pre=E2=80=91built PostgreSQL extensions as composable Docker image layers= ** **Project:** [https://github.com/pglayers/pglayers](https://github.com/pgla= yers/pglayers) --- ## =F0=9F=93=8C What It Does **pglayers** publishes **53 PostgreSQL extensions** as **minimal Docker ima= ges** (`FROM scratch`). =20 Each image contains only: - Shared libraries =20 - Control files =20 - SQL scripts =20 - Correct filesystem paths You compose them onto the official `postgres` Docker image using `COPY --fr= om`: ```dockerfile FROM postgres:17 COPY --from=3Dghcr.io/pglayers/pgx-pgvector:17 / / COPY --from=3Dghcr.io/pglayers/pgx-postgis:17 / / COPY --from=3Dghcr.io/pglayers/pgx-pg_cron:17 / / ``` No compilation. =20 No `apt-get`. =20 No build tools in the final image. =20 Just `CREATE EXTENSION` as usual. --- ## =F0=9F=9F=A2 Ready-to-Use Images For a fully preconfigured setup: ```bash docker run -d -e POSTGRES_PASSWORD=3Ds ghcr.io/pglayers/pglayers-full:17 ``` Includes: - All **53 extensions** - `shared_preload_libraries` already set Also available: - **Azure profile** (28 extensions) matching *Azure Database for PostgreSQL= Flexible Server* =20 Useful for local dev/test against managed services. --- ## =F0=9F=93=A6 Extensions Included 53 extensions across major categories: - **AI/ML:** pgvector =20 - **Geospatial:** PostGIS, pgRouting, h3-pg =20 - **Time-series:** TimescaleDB =20 - **Analytics:** pg_duckdb =20 - **Observability:** pgaudit, pg_stat_monitor, pg_qualstats, pg_wait_sampli= ng =20 - **Scheduling:** pg_cron =20 - **Partitioning:** pg_partman =20 - **Replication:** pglogical, pg_failover_slots, wal2json =20 - **Full text search:** pg_textsearch, pg_bigm, rum =20 - **And 36 more** **Full list:** [https://github.com/pglayers/pglayers#available-extensions](= https://github.com/pglayers/pglayers#available-extensions) --- ## =F0=9F=90=98 Supported PostgreSQL Versions - **PostgreSQL 17** (stable) =20 - **PostgreSQL 18** (stable) =20 - **PostgreSQL 19** (experimental, beta) All images support **linux/amd64** and **linux/arm64**. --- ## =F0=9F=A7=B1 PG 18+ Isolated Layout PostgreSQL 18 introduces `extension_control_path` and `dynamic_library_path= `. =20 pglayers uses these to place each extension in its own namespace: ``` /extensions// ``` Benefits: - No file collisions =20 - Multiple versions of the same library can coexist =20 - Extensions can be mounted at deploy time (no rebuild) Example: ```dockerfile COPY --from=3Dghcr.io/pglayers/pgx-pgvector:18 / /extensions/pgvector/ COPY --from=3Dghcr.io/pglayers/pgx-pg_cron:18 / /extensions/pg_cron/ ``` PostgreSQL locates them via: ``` extension_control_path =3D '/extensions/pgvector/share:/extensions/pg_cron/= share:$system' dynamic_library_path =3D '/extensions/pgvector/lib:/extensions/pg_cron/li= b:$libdir' ``` Fully compatible with **CloudNativePG =E2=89=A5 1.27**, which auto=E2=80=91= manages these GUCs. --- ## =F0=9F=A7=AA Testing The test suite validates: - No file collisions between layers =20 - No overwrites of base image files =20 - All shared library dependencies resolve (`ldd`) =20 - `CREATE EXTENSION` succeeds for every extension =20 - Functional smoke tests + integration tests --- ## =F0=9F=93=84 Licensing Only permissive open-source licenses: - PostgreSQL =20 - MIT =20 - BSD =20 - Apache 2.0 =20 - ISC =20 - MPL=E2=80=912.0 =20 **PostGIS** and **pgRouting** (GPL=E2=80=912.0) included under the standard= *mere aggregation* interpretation used in the PostgreSQL ecosystem. No BSL, SSPL, or proprietary-dependency extensions. --- ## =F0=9F=A4=9D Contributing Contributions welcome! Adding a new extension requires: - `Dockerfile` =20 - `extension.conf` =20 - `test.sql` See **CONTRIBUTING.md** for details. Feedback, bug reports, and extension requests via **GitHub Issues**. --- ## =F0=9F=99=8F Acknowledgements This project stands on the shoulders of the PostgreSQL community: - PostgreSQL Global Development Group =20 - PGDG APT Repository maintainers =20 - Official PostgreSQL Docker image maintainers =20 - Debian PostgreSQL team =20 - Every extension author who publishes under permissive licenses =20 *pglayers is a thin layer of automation on top of their work. Without the q= uality and consistency of the upstream ecosystem, this project would not ex= ist.* **Thanks! =20 Ismael Mejia** --===============7650768556197276411== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable pglayers: PostgreSQL extensions as stackable Docker layers</titl= e> <style> @media only screen and (max-width: 620px) { table[class=3Dbody] h1 { font-size: 28px !important; margin-bottom: 10px !important; } table[class=3Dbody] p, table[class=3Dbody] ul, table[class=3Dbody] ol, table[class=3Dbody] td, table[class=3Dbody] span, table[class=3Dbody] a { font-size: 16px !important; } table[class=3Dbody] .wrapper, table[class=3Dbody] .article { padding: 10px !important; } table[class=3Dbody] .content { padding: 0 !important; } table[class=3Dbody] .container { padding: 0 !important; width: 100% !important; } table[class=3Dbody] .main { border-left-width: 0 !important; border-radius: 0 !important; border-right-width: 0 !important; } table[class=3Dbody] .btn table { width: 100% !important; } table[class=3Dbody] .btn a { width: 100% !important; } table[class=3Dbody] .img-responsive { height: auto !important; max-width: 100% !important; width: auto !important; } } @media all { .ExternalClass { width: 100%; } .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div { line-height: 100%; } .apple-link a { color: inherit !important; font-family: inherit !important; font-size: inherit !important; font-weight: inherit !important; line-height: inherit !important; text-decoration: none !important; } #MessageViewBody a { color: inherit; text-decoration: none; font-size: inherit; font-family: inherit; font-weight: inherit; line-height: inherit; } .btn-primary table td:hover { background-color: #34495e !important; } .btn-primary a:hover { background-color: #34495e !important; border-color: #34495e !important; } } </style> </head> <body class=3D"" style=3D"background-color: #f6f6f6; font-family: sans-se= rif; -webkit-font-smoothing: antialiased; font-size: 14px; line-height: 1.4= ; margin: 0; padding: 0; -ms-text-size-adjust: 100%; -webkit-text-size-adju= st: 100%;"> <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" class=3D"body" = style=3D"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace= : 0pt; width: 100%; background-color: #f6f6f6;"> <tr> <td style=3D"font-family: sans-serif; font-size: 14px; vertical-ali= gn: top;"> </td> <td class=3D"container" style=3D"font-family: sans-serif; font-size= : 14px; vertical-align: top; display: block; Margin: 0 auto; max-width: 580= px; padding: 10px; width: 580px;"> <div class=3D"content" style=3D"box-sizing: border-box; display: = block; Margin: 0 auto; max-width: 580px; padding: 10px;"> <span class=3D"preheader" style=3D"color: transparent; display:= none; height: 0; max-height: 0; max-width: 0; opacity: 0; overflow: hidden= ; mso-hide: all; visibility: hidden; width: 0;"></span> <table class=3D"main" style=3D"border-collapse: separate; mso-t= able-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; = border-radius: 3px;"> <tr> <td class=3D"wrapper" style=3D"font-family: sans-serif; fon= t-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px;"> <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" s= tyle=3D"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace:= 0pt; width: 100%;"> <tr> <td style=3D"font-family: sans-serif; font-size: 14px= ; vertical-align: top;"> <div> <h1 style=3D"color: #000; font-family: sans-serif; line-height: 1.4; margin= : 0; margin-bottom: 30px; font-size: 25px; font-weight: 300; text-align: ce= nter">pglayers: PostgreSQL extensions as stackable Docker layers</h1> </div> <h1 style=3D"color: #000; font-family: sans-serif; line-height: 1.4; margin= : 0; margin-bottom: 30px; font-size: 25px; font-weight: 300; text-align: ce= nter">=F0=9F=9A=80 Announcing <strong>pglayers</strong></h1> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><strong>Pre=E2=80=91built PostgreSQL extens= ions as composable Docker image layers</strong></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><strong>Project:</strong> <a href=3D"https:= //github.com/pglayers/pglayers" style=3D"color: #3498db; text-decoration: u= nderline">https://github.com/pglayers/pglayers</a></p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=93=8C What It Does</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><strong>pglayers</strong> publishes <strong= >53 PostgreSQL extensions</strong> as <strong>minimal Docker images</strong= > (<code>FROM scratch</code>).<br/> Each image contains only:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px">Shared librarie= s </li> <li style=3D"list-style-position: inside; margin-left: 5px">Control files = </li> <li style=3D"list-style-position: inside; margin-left: 5px">SQL scripts </= li> <li style=3D"list-style-position: inside; margin-left: 5px">Correct filesys= tem paths</li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">You compose them onto the official <code>po= stgres</code> Docker image using <code>COPY --from</code>:</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><code>dockerfile FROM postgres:17 COPY --from=3Dghcr.io/pglayers/pgx-pgvector:17 / / COPY --from=3Dghcr.io/pglayers/pgx-postgis:17 / / COPY --from=3Dghcr.io/pglayers/pgx-pg_cron:17 / /</code></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">No compilation.<br/> No <code>apt-get</code>.<br/> No build tools in the final image.<br/> Just <code>CREATE EXTENSION</code> as usual.</p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=9F=A2 Ready-to-Use Image= s</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">For a fully preconfigured setup:</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><code>bash docker run -d -e POSTGRES_PASSWORD=3Ds ghcr.io/pglayers/pglayers-full:17</c= ode></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Includes:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px">All <strong>53 = extensions</strong></li> <li style=3D"list-style-position: inside; margin-left: 5px"><code>shared_pr= eload_libraries</code> already set</li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Also available:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Azure p= rofile</strong> (28 extensions) matching <em>Azure Database for PostgreSQL = Flexible Server</em><br/> Useful for local dev/test against managed services.</li> </ul> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=93=A6 Extensions Include= d</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">53 extensions across major categories:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>AI/ML:<= /strong> pgvector </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Geospat= ial:</strong> PostGIS, pgRouting, h3-pg </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Time-se= ries:</strong> TimescaleDB </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Analyti= cs:</strong> pg_duckdb </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Observa= bility:</strong> pgaudit, pg_stat_monitor, pg_qualstats, pg_wait_sampling = </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Schedul= ing:</strong> pg_cron </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Partiti= oning:</strong> pg_partman </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Replica= tion:</strong> pglogical, pg_failover_slots, wal2json </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Full te= xt search:</strong> pg_textsearch, pg_bigm, rum </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>And 36 = more</strong></li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><strong>Full list:</strong> <a href=3D"http= s://github.com/pglayers/pglayers#available-extensions" style=3D"color: #349= 8db; text-decoration: underline">https://github.com/pglayers/pglayers#avail= able-extensions</a></p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=90=98 Supported PostgreS= QL Versions</h2> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Postgre= SQL 17</strong> (stable) </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Postgre= SQL 18</strong> (stable) </li> <li style=3D"list-style-position: inside; margin-left: 5px"><strong>Postgre= SQL 19</strong> (experimental, beta)</li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">All images support <strong>linux/amd64</str= ong> and <strong>linux/arm64</strong>.</p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=A7=B1 PG 18+ Isolated La= yout</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">PostgreSQL 18 introduces <code>extension_co= ntrol_path</code> and <code>dynamic_library_path</code>.<br/> pglayers uses these to place each extension in its own namespace:</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><code>/extensions/<name>/</code></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Benefits:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px">No file collisi= ons </li> <li style=3D"list-style-position: inside; margin-left: 5px">Multiple versio= ns of the same library can coexist </li> <li style=3D"list-style-position: inside; margin-left: 5px">Extensions can = be mounted at deploy time (no rebuild)</li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Example:</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><code>dockerfile COPY --from=3Dghcr.io/pglayers/pgx-pgvector:18 / /extensions/pgvector/ COPY --from=3Dghcr.io/pglayers/pgx-pg_cron:18 / /extensions/pg_cron/</cod= e></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">PostgreSQL locates them via:</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><code>extension_control_path =3D '/extensio= ns/pgvector/share:/extensions/pg_cron/share:$system' dynamic_library_path =3D '/extensions/pgvector/lib:/extensions/pg_cron/li= b:$libdir'</code></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Fully compatible with <strong>CloudNativePG= =E2=89=A5 1.27</strong>, which auto=E2=80=91manages these GUCs.</p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=A7=AA Testing</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">The test suite validates:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px">No file collisi= ons between layers </li> <li style=3D"list-style-position: inside; margin-left: 5px">No overwrites o= f base image files </li> <li style=3D"list-style-position: inside; margin-left: 5px">All shared libr= ary dependencies resolve (<code>ldd</code>) </li> <li style=3D"list-style-position: inside; margin-left: 5px"><code>CREATE EX= TENSION</code> succeeds for every extension </li> <li style=3D"list-style-position: inside; margin-left: 5px">Functional smok= e tests + integration tests</li> </ul> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=93=84 Licensing</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Only permissive open-source licenses:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px">PostgreSQL </l= i> <li style=3D"list-style-position: inside; margin-left: 5px">MIT </li> <li style=3D"list-style-position: inside; margin-left: 5px">BSD </li> <li style=3D"list-style-position: inside; margin-left: 5px">Apache 2.0 </l= i> <li style=3D"list-style-position: inside; margin-left: 5px">ISC </li> <li style=3D"list-style-position: inside; margin-left: 5px">MPL=E2=80=912.0= </li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><strong>PostGIS</strong> and <strong>pgRout= ing</strong> (GPL=E2=80=912.0) included under the standard <em>mere aggrega= tion</em> interpretation used in the PostgreSQL ecosystem.</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">No BSL, SSPL, or proprietary-dependency ext= ensions.</p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=A4=9D Contributing</h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Contributions welcome!</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Adding a new extension requires:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px"><code>Dockerfil= e</code> </li> <li style=3D"list-style-position: inside; margin-left: 5px"><code>extension= .conf</code> </li> <li style=3D"list-style-position: inside; margin-left: 5px"><code>test.sql<= /code></li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">See <strong>CONTRIBUTING.md</strong> for de= tails.</p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">Feedback, bug reports, and extension reques= ts via <strong>GitHub Issues</strong>.</p> <hr/> <h2 style=3D"color: #000; font-family: sans-serif; font-weight: 400; line-h= eight: 1.4; margin: 0; margin-bottom: 30px">=F0=9F=99=8F Acknowledgements</= h2> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px">This project stands on the shoulders of the= PostgreSQL community:</p> <ul style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal;= margin: 0; margin-bottom: 15px"> <li style=3D"list-style-position: inside; margin-left: 5px">PostgreSQL Glob= al Development Group </li> <li style=3D"list-style-position: inside; margin-left: 5px">PGDG APT Reposi= tory maintainers </li> <li style=3D"list-style-position: inside; margin-left: 5px">Official Postgr= eSQL Docker image maintainers </li> <li style=3D"list-style-position: inside; margin-left: 5px">Debian PostgreS= QL team </li> <li style=3D"list-style-position: inside; margin-left: 5px">Every extension= author who publishes under permissive licenses </li> </ul> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><em>pglayers is a thin layer of automation = on top of their work. Without the quality and consistency of the upstream e= cosystem, this project would not exist.</em></p> <p style=3D"font-family: sans-serif; font-size: 14px; font-weight: normal; = margin: 0; margin-bottom: 15px"><strong>Thanks!<br/> Ismael Mejia</strong></p> </td> </tr> </table> </td> </tr> </table> <div class=3D"footer" style=3D"clear: both; Margin-top: 10px; t= ext-align: center; width: 100%;"> <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" style= =3D"border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt= ; width: 100%;"> <tr> <td class=3D"content-block" style=3D"font-family: sans-se= rif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-siz= e: 12px; color: #999999; text-align: center;"> <span class=3D"apple-link" style=3D"color: #999999; fon= t-size: 12px; text-align: center;"> This email was sent to you from pglayers. It was delivered on their behalf = by the PostgreSQL project. Any questions about the content of the message shou= ld be sent to pglayers. </span> <br><br> You were sent this email as a subscriber of the <em>pgsql-announce</em> mai= linglist, for the content tag Related Open Source. To unsubscribe from further emails, or change which emails you want to receive, please click th= e personal unsubscribe link that you can find in the headers of this email, or visit <a href=3D"https://lists.postgresql.org/unsubscribe/" style=3D"color: #3498= db; text-decoration: underline">https://lists.postgresql.org/unsubscribe/</= a>. </td> </tr> </table> </div> </div> </td> <td style=3D"font-family: sans-serif; font-size: 14px; vertical-ali= gn: top;"> </td> </tr> </table> </body> </html> --===============7650768556197276411==--