commit:     5b4ff9424a29182e015eca9b936c4147809ab83e
Author:     Patrick Lauer <patrick <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 20 15:23:58 2025 +0000
Commit:     Patrick Lauer <patrick <AT> gentoo <DOT> org>
CommitDate: Thu Feb 20 15:24:24 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5b4ff942

dev-db/postgresql: add 13.20, 14.17, 15.12, 16.8, 17.4

Signed-off-by: Patrick Lauer <patrick <AT> gentoo.org>

 dev-db/postgresql/Manifest                |   5 +
 dev-db/postgresql/postgresql-13.20.ebuild | 457 ++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-14.17.ebuild | 457 ++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-15.12.ebuild | 459 ++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-16.8.ebuild  | 460 ++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-17.4.ebuild  | 477 ++++++++++++++++++++++++++++++
 6 files changed, 2315 insertions(+)

diff --git a/dev-db/postgresql/Manifest b/dev-db/postgresql/Manifest
index cadf771f6fc6..1c8a8157b1df 100644
--- a/dev-db/postgresql/Manifest
+++ b/dev-db/postgresql/Manifest
@@ -1,10 +1,15 @@
 DIST postgresql-13.18.tar.bz2 21687645 BLAKE2B 
dd8c5906f7d53b5447e8c307960a5ff7cf25cec711a508acf80609e12f9411c9382753da313e31a546be528ff8263327befadcb5f8a40c3164a56f582710bc43
 SHA512 
2694ff9402683c90ccfbb53a465f6b6a09702b9b5b44e2db84a3a41175427d889d1b823897fd361b04a53dd3596289822e36a77215cb45dd972d79850fbdb97b
 DIST postgresql-13.19.tar.bz2 21729020 BLAKE2B 
ea561309053224a9181ec7a282259c5220deddaa0c871942ec9574c700626384c8215552796a1178f202ece97ab439f8dea680f51fe431526afab171c338da73
 SHA512 
cb11fbd65067572c46a06cb8c0838d2233b32b734b89db9bea954add6c50ffce2119222555dd66d3af568058b8939da2f36c288b76e8ed3f130c5504019d5f11
+DIST postgresql-13.20.tar.bz2 21730844 BLAKE2B 
ff5822ee32ae4335c92e035ea4ec8cb2fbf2028d9245f5ffdbf5257833345d40e89e3eb12f4d93d0600efc2c67917be18b434b61877e47b4accb4bd78e54bb60
 SHA512 
884ee8327b803c66679238525e7d51320ea537b41138d7fe8fd7e725631f734a61e53646d9cec78154f3f05a3b50e90508793a56a8f0f76699a53773930cb1d0
 DIST postgresql-14.15.tar.bz2 22458243 BLAKE2B 
4d5a1c253c5b015e68634ebe433dee421c5a1e1bac0cc5be2eb178001755656efd9642be2369d8b7a76fcbd4a127f40dd99d3c4624c137fca531558464df1a5d
 SHA512 
227f9551167ee62e5185d6f6777e100ecc09f497b9ee1b5a8e659de8d4c237b0f9a97005706bbf64c3e839271e2630f6a417ba98dfce47bcb4c27e8641a7c6ef
 DIST postgresql-14.16.tar.bz2 22491073 BLAKE2B 
9ace49a4f941ac1107efd7642387956d7be1df5a41c7244964b77d1c7ca1908845590841db15694da92f49f1c3c59ad83e6b2d7c55885e2505b2ff7c1a2bbb1a
 SHA512 
260b6a6bc42a448f9bb3bf4194f601d2c10de517e39c8437b194662e41aae5013f2921b3712014ada24a274edb0db5f7b9f69d15cbb48d77d36b4c53092c93e4
+DIST postgresql-14.17.tar.bz2 22488812 BLAKE2B 
e81c2416e69e3b31a69b5e8db32543c8aaff1b81f7163b3a204827d5ee4cffd08a5cc45bdc774a4ffd19d4b48dee5797842364bb9706ada945fd6ff415687486
 SHA512 
1cb7d16fbfbceaa6bf0acd4cf9bea3e8fc078fcc6c1f7baad1d66040e1467f59ac54858b11a26543b50e25d3f0db47e0c72539cde743c794d41fa9d2f97c22c1
 DIST postgresql-15.10.tar.bz2 23138615 BLAKE2B 
d187afd9897feb8bb353dee705817781f099e7cc41eb915f096196ad228646fc65d706c488258d5ee9033b20d2204fd11f5e92e33387310394e7cc102f02b72e
 SHA512 
73513f5f688f470aadd95dddef3b39b5d140d539bdf3171e053a89b3eed4c769f7951280468e9f11102f2de9fe8742bb38676c8d5d43418544b9482d83957ef4
 DIST postgresql-15.11.tar.bz2 23167652 BLAKE2B 
4345c0c45a3272b7b272b48a02b436d3ede7a8121dfe2e3ddd282eb46c6730a31829fdb465274d15d3f6f6a3d50f6dd75be4f750f42ec8eb0f89089de5da9091
 SHA512 
65a077313cf9836e6a9e48b3912d1fac98689f85e6dc00d64aa861158988bcb1719d8d9a64c5ad6fac2f0c75b447cfce5b9dc73229a9fcbbcd96e374fffe91dc
+DIST postgresql-15.12.tar.bz2 23170228 BLAKE2B 
fa92c660a7963a0ad3024200ccf5efc5898d4ba639dcd2128afb3962567022d2829841d16af3566800d3332f6e68ea2da6811492df7fe013bb11bfc3671828bf
 SHA512 
6ccb44cb7ff2133ccb03dfc6b49e26714d9aecb91f4b9d019a8f1e7d0d71ed0bf8101fbbda0185091e4688a557600f020a12306c389e819d731184c17e182717
 DIST postgresql-16.6.tar.bz2 24856956 BLAKE2B 
2d6d6efcc4cb0027c03422c839856ac024d3824a7e7da42cafbb961616cdd078064e78b6eb1c98565240ab1f78eb52582f38c9ce80b3a98f9e65568b2c14e40c
 SHA512 
ffd6d39fb7aed87241237d68af4934fba1b4ac1be4d3c2833e308e50c21a693796fe54b73e0905365d7557009c40049a23b966aa86765b969797434a0d4bd5f8
 DIST postgresql-16.7.tar.bz2 24905167 BLAKE2B 
1b72e3da10d77521315a8c0c7687390c00c41934bf71a2cd7985a158040f2ed1513e573f682a0ac59b721023be22ed5fa9922c73e3058b5d23c8955ecd38b9ee
 SHA512 
9f91e3f66c361755b088969ba100c1193806495428a88b6df7353370d5bc74f464feac36c51ebcb6f7a6ab97cde539dd904efe5f7f43bcde5576c38c5d5aab54
+DIST postgresql-16.8.tar.bz2 24911337 BLAKE2B 
03dadec5c74235d1250a5b5eea38630ea9675dc016defadf912cd837207facee000a611c62107035443ea28c491f12be84105dacec67eddf8bc48f3adf4f2097
 SHA512 
f44fdfe01fbf82f3ffe4c9fc860bd27e06dddfe43b6bd6d1c6e267d64086eb5517e23cc1b2b8895cb73e63fce76779993ea9785a97e6e348ed91b4c08bb0492d
 DIST postgresql-17.2.tar.bz2 21408880 BLAKE2B 
1afafbec5db26ab17f2410c40db38e30fc1413cd518d387bc01640232698407de97123d0c61e1ec4d32d1041055db874f04dd52ad3697f1b9993b1aff3c5156a
 SHA512 
8e15e47c22d21e1cadc31249cf31af5abe34b8ab72930e58e5fe6124795ad237ca7b4fd3bf36b5f18589c4fc439dc2bab3045d9b4ba23d1846b4b2be6fd1cb69
 DIST postgresql-17.3.tar.bz2 21520115 BLAKE2B 
49f794e2bd1fa05f881aa003fd601a8980601c795014aec71651d3b678370511da307de97a80540526204b339ca4caf95f3912929d57295f51d6f9a7e31d82c9
 SHA512 
700b62f2963d8074cae96bacd1faa74d86035ffa8291d81b5a0c1c1950b104a947a0f82b7aa02ddb0624b0da433690358f6a7f28201d83da7db850ea08b4b34f
+DIST postgresql-17.4.tar.bz2 21519810 BLAKE2B 
d8095023ae85ba2a28479e4c1d6dac57ccb71471e6e3a74730052c368a71e66e3e84df36a1e1b85f3bd070141b9464aa9c4aad179f421ea8fea274a7975398af
 SHA512 
43288a297c753d075405a7bd3fce17f6a260d6b0a80a156c1e6267e0ebd40c85b7bb929e893956a109eda4d93fa8936f43e981242c1fd67a91012cba5472026c

diff --git a/dev-db/postgresql/postgresql-13.20.ebuild 
b/dev-db/postgresql/postgresql-13.20.ebuild
new file mode 100644
index 000000000000..c184ee372b5f
--- /dev/null
+++ b/dev-db/postgresql/postgresql-13.20.ebuild
@@ -0,0 +1,457 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11,12,13} )
+LLVM_COMPAT=( {15..19} )
+LLVM_OPTIONAL=1
+
+inherit flag-o-matic linux-info llvm-r1 pam python-single-r1 systemd tmpfiles
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~s390 
~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+
+SLOT=$(ver_cut 1)
+
+MY_PV=${PV/_/}
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+SRC_URI="https://ftp.postgresql.org/pub/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2";
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="https://www.postgresql.org/";
+
+IUSE="debug doc icu kerberos ldap llvm nls pam perl python +readline
+         selinux +server systemd ssl static-libs tcl uuid xml zlib"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+acct-group/postgres
+acct-user/postgres
+sys-apps/less
+virtual/libintl
+icu? ( dev-libs/icu:= )
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap:= )
+llvm? ( $(llvm_gen_dep '
+       llvm-core/clang:${LLVM_SLOT}
+       llvm-core/llvm:${LLVM_SLOT}
+       ') )
+pam? ( sys-libs/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+server? ( systemd? ( sys-apps/systemd ) )
+ssl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,musl} )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+sys-devel/bison
+app-alternatives/lex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use llvm && llvm-r1_pkg_setup
+
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       eapply "${FILESDIR}"/${PN}-13.3-riscv-spinlocks.patch
+
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || eapply "${FILESDIR}/${PN}-13.8-no-server.patch"
+
+       if use pam ; then
+               sed "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       eapply_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       local myconf="\
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable debug) \
+               $(use_with icu) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with llvm) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(usex server "$(use_with systemd)" '--without-systemd') \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               $(use_enable nls)"
+       if use alpha; then
+               myconf+=" --disable-spinlocks"
+       else
+               # Should be the default but just in case
+               myconf+=" --enable-spinlocks"
+       fi
+       econf ${myconf}
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               serverman=(
+                       initdb
+                       
pg_{archivecleanup,controldata,ctl,resetwal,rewind,standby}
+                       pg_{test_{fsync,timing},upgrade,waldump}
+                       post{gres,master}
+               )
+               for m in ${serverman[@]} ; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       # Create slot specific man pages
+       local bn f mansec slotted_name
+       for mansec in 1 3 7 ; do
+               local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}"
+
+               mkdir -p "${ED}"/usr/share/man/man${mansec} || die "making man 
dir"
+               pushd "${ED}"/usr/share/man/man${mansec} > /dev/null || die 
"pushd failed"
+
+               for f in 
"${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do
+                       bn=$(basename "${f}")
+                       slotted_name=${bn%.${mansec}}${SLOT}.${mansec}
+                       case ${bn} in
+                               TABLE.7|WITH.7)
+                                       echo ".so ${rel_manpath}/SELECT.7" > 
${slotted_name}
+                                       ;;
+                               *)
+                                       echo ".so ${rel_manpath}/${bn}" > 
${slotted_name}
+                                       ;;
+                       esac
+               done
+
+               popd > /dev/null
+       done
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       # Don't delete libpg{port,common}.a (Bug #571046). They're always
+       # needed by extensions utilizing PGXS.
+       use static-libs || \
+               find "${ED}" -name '*.a' ! -name libpgport.a ! -name 
libpgcommon.a \
+                        -delete
+
+       # Make slot specific links to programs
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}"
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               if use systemd; then
+                       sed -e "s|@SLOT@|${SLOT}|g" -e 
"s|@LIBDIR@|$(get_libdir)|g" \
+                               "${FILESDIR}/${PN}.service-9.6-r1" | \
+                               systemd_newunit - ${PN}-${SLOT}.service
+                       newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+                       newtmpfiles "${FILESDIR}"/${PN}.tmpfiles 
${PN}-${SLOT}.conf
+               fi
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 1775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_postinst() {
+       use server && use systemd && tmpfiles_process ${PN}-${SLOT}.conf
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "https://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+
+               if [[ -n ${REPLACING_VERSIONS} ]] ; then
+                       ewarn "If your system is using 'pg_stat_statements' and 
you are running a"
+                       ewarn "version of PostgreSQL ${SLOT}, we advise that 
you execute"
+                       ewarn "the following command after upgrading:"
+                       ewarn
+                       ewarn "ALTER EXTENSION pg_stat_statements UPDATE;"
+               fi
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "$(dirname ${DATA_DIR%/})" || die "Couldn't parent 
dirs"
+               mkdir -m 0700 "${DATA_DIR%/}" || die "Couldn't make DATA_DIR"
+               chown -h postgres:postgres "${DATA_DIR%/}" || die "Couldn't 
chown"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su - postgres -c 
"${EROOT}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       if ! use systemd; then
+               einfo "The PostgreSQL server, by default, will log events to:"
+               einfo "    ${DATA_DIR%/}/postmaster.log"
+               einfo
+       fi
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       elif use systemd; then
+               einfo "You should use the 'postgresql-${SLOT}.service' unit to 
run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       else
+               einfo "You should use the 
'${EROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the 
same. We set
+               # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by 
Portage.
+               local old_ctype=${LC_CTYPE}
+               export LC_CTYPE=${LC_COLLATE}
+               emake check
+               export LC_CTYPE=${old_ctype}
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-14.17.ebuild 
b/dev-db/postgresql/postgresql-14.17.ebuild
new file mode 100644
index 000000000000..3a3e68ee28a9
--- /dev/null
+++ b/dev-db/postgresql/postgresql-14.17.ebuild
@@ -0,0 +1,457 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11,12,13} )
+LLVM_COMPAT=( {15..19} )
+LLVM_OPTIONAL=1
+
+inherit flag-o-matic linux-info llvm-r1 pam python-single-r1 systemd tmpfiles
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~s390 
~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+
+SLOT=$(ver_cut 1)
+
+MY_PV=${PV/_/}
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+SRC_URI="https://ftp.postgresql.org/pub/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2";
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="https://www.postgresql.org/";
+
+IUSE="debug doc icu kerberos ldap llvm +lz4 nls pam perl python +readline
+         selinux +server systemd ssl static-libs tcl uuid xml zlib"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+acct-group/postgres
+acct-user/postgres
+sys-apps/less
+virtual/libintl
+icu? ( dev-libs/icu:= )
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap:= )
+llvm? ( $(llvm_gen_dep '
+       llvm-core/clang:${LLVM_SLOT}
+       llvm-core/llvm:${LLVM_SLOT}
+       ') )
+lz4? ( app-arch/lz4 )
+pam? ( sys-libs/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+server? ( systemd? ( sys-apps/systemd ) )
+ssl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,musl} )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+sys-devel/bison
+app-alternatives/lex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use llvm && llvm-r1_pkg_setup
+
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || eapply "${FILESDIR}/${PN}-14.5-no-server.patch"
+
+       if use pam ; then
+               sed "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       eapply_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       local myconf="\
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable debug) \
+               $(use_with icu) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with llvm) \
+               $(use_with lz4) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(usex server "$(use_with systemd)" '--without-systemd') \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               $(use_enable nls)"
+       if use alpha; then
+               myconf+=" --disable-spinlocks"
+       else
+               # Should be the default but just in case
+               myconf+=" --enable-spinlocks"
+       fi
+       econf ${myconf}
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               serverman=(
+                       initdb
+                       
pg_{archivecleanup,controldata,ctl,resetwal,rewind,standby}
+                       pg_{test_{fsync,timing},upgrade,waldump}
+                       post{gres,master}
+               )
+               for m in ${serverman[@]} ; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       # Create slot specific man pages
+       local bn f mansec slotted_name
+       for mansec in 1 3 7 ; do
+               local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}"
+
+               mkdir -p "${ED}"/usr/share/man/man${mansec} || die "making man 
dir"
+               pushd "${ED}"/usr/share/man/man${mansec} > /dev/null || die 
"pushd failed"
+
+               for f in 
"${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do
+                       bn=$(basename "${f}")
+                       slotted_name=${bn%.${mansec}}${SLOT}.${mansec}
+                       case ${bn} in
+                               TABLE.7|WITH.7)
+                                       echo ".so ${rel_manpath}/SELECT.7" > 
${slotted_name}
+                                       ;;
+                               *)
+                                       echo ".so ${rel_manpath}/${bn}" > 
${slotted_name}
+                                       ;;
+                       esac
+               done
+
+               popd > /dev/null
+       done
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       # Don't delete libpg{port,common}.a (Bug #571046). They're always
+       # needed by extensions utilizing PGXS.
+       use static-libs || \
+               find "${ED}" -name '*.a' ! -name libpgport.a ! -name 
libpgcommon.a \
+                        -delete
+
+       # Make slot specific links to programs
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}"
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               if use systemd; then
+                       sed -e "s|@SLOT@|${SLOT}|g" -e 
"s|@LIBDIR@|$(get_libdir)|g" \
+                               "${FILESDIR}/${PN}.service-9.6-r1" | \
+                               systemd_newunit - ${PN}-${SLOT}.service
+                       newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+                       newtmpfiles "${FILESDIR}"/${PN}.tmpfiles 
${PN}-${SLOT}.conf
+               fi
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 1775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_postinst() {
+       use server && use systemd && tmpfiles_process ${PN}-${SLOT}.conf
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "https://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+
+               if [[ -n ${REPLACING_VERSIONS} ]] ; then
+                       ewarn "If your system is using 'pg_stat_statements' and 
you are running a"
+                       ewarn "version of PostgreSQL ${SLOT}, we advise that 
you execute"
+                       ewarn "the following command after upgrading:"
+                       ewarn
+                       ewarn "ALTER EXTENSION pg_stat_statements UPDATE;"
+               fi
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "$(dirname ${DATA_DIR%/})" || die "Couldn't parent 
dirs"
+               mkdir -m 0700 "${DATA_DIR%/}" || die "Couldn't make DATA_DIR"
+               chown -h postgres:postgres "${DATA_DIR%/}" || die "Couldn't 
chown"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su - postgres -c 
"${EROOT}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       if ! use systemd; then
+               einfo "The PostgreSQL server, by default, will log events to:"
+               einfo "    ${DATA_DIR%/}/postmaster.log"
+               einfo
+       fi
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       elif use systemd; then
+               einfo "You should use the 'postgresql-${SLOT}.service' unit to 
run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       else
+               einfo "You should use the 
'${EROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the 
same. We set
+               # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by 
Portage.
+               local old_ctype=${LC_CTYPE}
+               export LC_CTYPE=${LC_COLLATE}
+               emake check
+               export LC_CTYPE=${old_ctype}
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-15.12.ebuild 
b/dev-db/postgresql/postgresql-15.12.ebuild
new file mode 100644
index 000000000000..6d42aa0aa67c
--- /dev/null
+++ b/dev-db/postgresql/postgresql-15.12.ebuild
@@ -0,0 +1,459 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11,12,13} )
+LLVM_COMPAT=( {15..19} )
+LLVM_OPTIONAL=1
+
+inherit flag-o-matic linux-info llvm-r1 pam python-single-r1 systemd tmpfiles
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv 
~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+
+SLOT=$(ver_cut 1)
+
+MY_PV=${PV/_/}
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+SRC_URI="https://ftp.postgresql.org/pub/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2";
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="https://www.postgresql.org/";
+
+IUSE="debug doc icu kerberos ldap llvm +lz4 nls pam perl python +readline
+         selinux +server systemd ssl static-libs tcl uuid xml zlib +zstd"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+acct-group/postgres
+acct-user/postgres
+sys-apps/less
+virtual/libintl
+icu? ( dev-libs/icu:= )
+kerberos? ( virtual/krb5 )
+ldap? ( net-nds/openldap:= )
+llvm? ( $(llvm_gen_dep '
+       llvm-core/clang:${LLVM_SLOT}
+       llvm-core/llvm:${LLVM_SLOT}
+       ') )
+lz4? ( app-arch/lz4 )
+pam? ( sys-libs/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+server? ( systemd? ( sys-apps/systemd ) )
+ssl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+zstd? ( app-arch/zstd )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,musl} )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+sys-devel/bison
+app-alternatives/lex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use llvm && llvm-r1_pkg_setup
+
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || eapply "${FILESDIR}/${PN}-15_beta3-no-server.patch"
+
+       if use pam ; then
+               sed "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       eapply_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       local myconf="\
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable debug) \
+               $(use_with icu) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with llvm) \
+               $(use_with lz4) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(usex server "$(use_with systemd)" '--without-systemd') \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               $(use_with zstd) \
+               $(use_enable nls)"
+       if use alpha; then
+               myconf+=" --disable-spinlocks"
+       else
+               # Should be the default but just in case
+               myconf+=" --enable-spinlocks"
+       fi
+       econf ${myconf}
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               serverman=(
+                       initdb
+                       
pg_{archivecleanup,controldata,ctl,resetwal,rewind,standby}
+                       pg_{test_{fsync,timing},upgrade,waldump}
+                       post{gres,master}
+               )
+               for m in ${serverman[@]} ; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       # Create slot specific man pages
+       local bn f mansec slotted_name
+       for mansec in 1 3 7 ; do
+               local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}"
+
+               mkdir -p "${ED}"/usr/share/man/man${mansec} || die "making man 
dir"
+               pushd "${ED}"/usr/share/man/man${mansec} > /dev/null || die 
"pushd failed"
+
+               for f in 
"${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do
+                       bn=$(basename "${f}")
+                       slotted_name=${bn%.${mansec}}${SLOT}.${mansec}
+                       case ${bn} in
+                               TABLE.7|WITH.7)
+                                       echo ".so ${rel_manpath}/SELECT.7" > 
${slotted_name}
+                                       ;;
+                               *)
+                                       echo ".so ${rel_manpath}/${bn}" > 
${slotted_name}
+                                       ;;
+                       esac
+               done
+
+               popd > /dev/null
+       done
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       # Don't delete libpg{port,common}.a (Bug #571046). They're always
+       # needed by extensions utilizing PGXS.
+       use static-libs || \
+               find "${ED}" -name '*.a' ! -name libpgport.a ! -name 
libpgcommon.a \
+                        -delete
+
+       # Make slot specific links to programs
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}"
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               if use systemd; then
+                       sed -e "s|@SLOT@|${SLOT}|g" -e 
"s|@LIBDIR@|$(get_libdir)|g" \
+                               "${FILESDIR}/${PN}.service-9.6-r1" | \
+                               systemd_newunit - ${PN}-${SLOT}.service
+                       newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+                       newtmpfiles "${FILESDIR}"/${PN}.tmpfiles 
${PN}-${SLOT}.conf
+               fi
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 1775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_postinst() {
+       use server && use systemd && tmpfiles_process ${PN}-${SLOT}.conf
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "https://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+
+               if [[ -n ${REPLACING_VERSIONS} ]] ; then
+                       ewarn "If your system is using 'pg_stat_statements' and 
you are running a"
+                       ewarn "version of PostgreSQL ${SLOT}, we advise that 
you execute"
+                       ewarn "the following command after upgrading:"
+                       ewarn
+                       ewarn "ALTER EXTENSION pg_stat_statements UPDATE;"
+               fi
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "$(dirname ${DATA_DIR%/})" || die "Couldn't parent 
dirs"
+               mkdir -m 0700 "${DATA_DIR%/}" || die "Couldn't make DATA_DIR"
+               chown -h postgres:postgres "${DATA_DIR%/}" || die "Couldn't 
chown"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su - postgres -c 
"${EROOT}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       if ! use systemd; then
+               einfo "The PostgreSQL server, by default, will log events to:"
+               einfo "    ${DATA_DIR%/}/postmaster.log"
+               einfo
+       fi
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       elif use systemd; then
+               einfo "You should use the 'postgresql-${SLOT}.service' unit to 
run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       else
+               einfo "You should use the 
'${EROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the 
same. We set
+               # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by 
Portage.
+               local old_ctype=${LC_CTYPE}
+               export LC_CTYPE=${LC_COLLATE}
+               emake check
+               export LC_CTYPE=${old_ctype}
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-16.8.ebuild 
b/dev-db/postgresql/postgresql-16.8.ebuild
new file mode 100644
index 000000000000..796af3705460
--- /dev/null
+++ b/dev-db/postgresql/postgresql-16.8.ebuild
@@ -0,0 +1,460 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11,12,13} )
+LLVM_COMPAT=( {15..19} )
+LLVM_OPTIONAL=1
+
+inherit flag-o-matic linux-info llvm-r1 pam python-single-r1 systemd tmpfiles
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv 
~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+
+SLOT=$(ver_cut 1)
+
+MY_PV=${PV/_/}
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+SRC_URI="https://ftp.postgresql.org/pub/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2";
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="https://www.postgresql.org/";
+
+IUSE="debug doc +icu kerberos ldap llvm +lz4 nls pam perl python
+         +readline selinux +server systemd ssl static-libs tcl uuid xml
+         zlib +zstd"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+acct-group/postgres
+acct-user/postgres
+sys-apps/less
+virtual/libintl
+icu? ( dev-libs/icu:= )
+kerberos? ( app-crypt/mit-krb5 )
+ldap? ( net-nds/openldap:= )
+llvm? ( $(llvm_gen_dep '
+       llvm-core/clang:${LLVM_SLOT}
+       llvm-core/llvm:${LLVM_SLOT}
+       ') )
+lz4? ( app-arch/lz4 )
+pam? ( sys-libs/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+server? ( systemd? ( sys-apps/systemd ) )
+ssl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+zstd? ( app-arch/zstd )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,musl} )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+sys-devel/bison
+app-alternatives/lex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+pkg_setup() {
+       use llvm && llvm-r1_pkg_setup
+
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || eapply "${FILESDIR}/${PN}-15_beta3-no-server.patch"
+
+       if use pam ; then
+               sed "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       eapply_user
+}
+
+src_configure() {
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       local myconf="\
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable debug) \
+               $(use_with icu) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with llvm) \
+               $(use_with lz4) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(usex server "$(use_with systemd)" '--without-systemd') \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               $(use_with zstd) \
+               $(use_enable nls)"
+       if use alpha; then
+               myconf+=" --disable-spinlocks"
+       else
+               # Should be the default but just in case
+               myconf+=" --enable-spinlocks"
+       fi
+       econf ${myconf}
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc README HISTORY
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               serverman=(
+                       initdb
+                       
pg_{archivecleanup,controldata,ctl,resetwal,rewind,standby}
+                       pg_{test_{fsync,timing},upgrade,waldump}
+                       post{gres,master}
+               )
+               for m in ${serverman[@]} ; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       # Create slot specific man pages
+       local bn f mansec slotted_name
+       for mansec in 1 3 7 ; do
+               local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}"
+
+               mkdir -p "${ED}"/usr/share/man/man${mansec} || die "making man 
dir"
+               pushd "${ED}"/usr/share/man/man${mansec} > /dev/null || die 
"pushd failed"
+
+               for f in 
"${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do
+                       bn=$(basename "${f}")
+                       slotted_name=${bn%.${mansec}}${SLOT}.${mansec}
+                       case ${bn} in
+                               TABLE.7|WITH.7)
+                                       echo ".so ${rel_manpath}/SELECT.7" > 
${slotted_name}
+                                       ;;
+                               *)
+                                       echo ".so ${rel_manpath}/${bn}" > 
${slotted_name}
+                                       ;;
+                       esac
+               done
+
+               popd > /dev/null
+       done
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       # Don't delete libpg{port,common}.a (Bug #571046). They're always
+       # needed by extensions utilizing PGXS.
+       use static-libs || \
+               find "${ED}" -name '*.a' ! -name libpgport.a ! -name 
libpgcommon.a \
+                        -delete
+
+       # Make slot specific links to programs
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}"
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               if use systemd; then
+                       sed -e "s|@SLOT@|${SLOT}|g" -e 
"s|@LIBDIR@|$(get_libdir)|g" \
+                               "${FILESDIR}/${PN}.service-9.6-r1" | \
+                               systemd_newunit - ${PN}-${SLOT}.service
+                       newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+                       newtmpfiles "${FILESDIR}"/${PN}.tmpfiles 
${PN}-${SLOT}.conf
+               fi
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 1775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_postinst() {
+       use server && use systemd && tmpfiles_process ${PN}-${SLOT}.conf
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "https://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+
+               if [[ -n ${REPLACING_VERSIONS} ]] ; then
+                       ewarn "If your system is using 'pg_stat_statements' and 
you are running a"
+                       ewarn "version of PostgreSQL ${SLOT}, we advise that 
you execute"
+                       ewarn "the following command after upgrading:"
+                       ewarn
+                       ewarn "ALTER EXTENSION pg_stat_statements UPDATE;"
+               fi
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "$(dirname ${DATA_DIR%/})" || die "Couldn't parent 
dirs"
+               mkdir -m 0700 "${DATA_DIR%/}" || die "Couldn't make DATA_DIR"
+               chown -h postgres:postgres "${DATA_DIR%/}" || die "Couldn't 
chown"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su - postgres -c 
"${EROOT}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       if ! use systemd; then
+               einfo "The PostgreSQL server, by default, will log events to:"
+               einfo "    ${DATA_DIR%/}/postmaster.log"
+               einfo
+       fi
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       elif use systemd; then
+               einfo "You should use the 'postgresql-${SLOT}.service' unit to 
run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       else
+               einfo "You should use the 
'${EROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the 
same. We set
+               # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by 
Portage.
+               local old_ctype=${LC_CTYPE}
+               export LC_CTYPE=${LC_COLLATE}
+               emake check
+               export LC_CTYPE=${old_ctype}
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

diff --git a/dev-db/postgresql/postgresql-17.4.ebuild 
b/dev-db/postgresql/postgresql-17.4.ebuild
new file mode 100644
index 000000000000..f53579588119
--- /dev/null
+++ b/dev-db/postgresql/postgresql-17.4.ebuild
@@ -0,0 +1,477 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10,11,12,13} )
+LLVM_COMPAT=( {15..19} )
+LLVM_OPTIONAL=1
+
+inherit flag-o-matic linux-info llvm-r1 pam python-single-r1 systemd tmpfiles
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv 
~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
+
+SLOT=$(ver_cut 1)
+
+MY_PV=${PV/_/}
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+SRC_URI="https://ftp.postgresql.org/pub/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2";
+
+LICENSE="POSTGRESQL GPL-2"
+DESCRIPTION="PostgreSQL RDBMS"
+HOMEPAGE="https://www.postgresql.org/";
+
+IUSE="debug doc +icu kerberos ldap llvm +lz4 nls pam perl python
+         +readline selinux +server systemd ssl static-libs tcl uuid xml
+         zlib +zstd"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+CDEPEND="
+>=app-eselect/eselect-postgresql-2.0
+acct-group/postgres
+acct-user/postgres
+sys-apps/less
+virtual/libintl
+icu? ( dev-libs/icu:= )
+kerberos? ( app-crypt/mit-krb5 )
+ldap? ( net-nds/openldap:= )
+llvm? ( $(llvm_gen_dep '
+       llvm-core/clang:${LLVM_SLOT}
+       llvm-core/llvm:${LLVM_SLOT}
+       ') )
+lz4? ( app-arch/lz4 )
+pam? ( sys-libs/pam )
+perl? ( >=dev-lang/perl-5.8:= )
+python? ( ${PYTHON_DEPS} )
+readline? ( sys-libs/readline:0= )
+server? ( systemd? ( sys-apps/systemd ) )
+ssl? ( >=dev-libs/openssl-0.9.6-r1:0= )
+tcl? ( >=dev-lang/tcl-8:0= )
+xml? ( dev-libs/libxml2 dev-libs/libxslt )
+zlib? ( sys-libs/zlib )
+zstd? ( app-arch/zstd )
+"
+
+# uuid flags -- depend on sys-apps/util-linux for Linux libcs, or if no
+# supported libc in use depend on dev-libs/ossp-uuid. For BSD systems,
+# the libc includes UUID functions.
+UTIL_LINUX_LIBC=( elibc_{glibc,musl} )
+
+nest_usedep() {
+       local front back
+       while [[ ${#} -gt 1 ]]; do
+               front+="${1}? ( "
+               back+=" )"
+               shift
+       done
+       echo "${front}${1}${back}"
+}
+
+CDEPEND+="
+uuid? (
+       ${UTIL_LINUX_LIBC[@]/%/? ( sys-apps/util-linux )}
+       $(nest_usedep ${UTIL_LINUX_LIBC[@]/#/!} dev-libs/ossp-uuid)
+)"
+
+DEPEND="${CDEPEND}
+sys-devel/bison
+app-alternatives/lex
+nls? ( sys-devel/gettext )
+xml? ( virtual/pkgconfig )
+"
+
+RDEPEND="${CDEPEND}
+selinux? ( sec-policy/selinux-postgresql )
+"
+
+# Openjade, docbook, XML, and XSLT are needed to generate manpages and
+# any documentation that may be elected.
+BDEPEND="
+app-text/openjade
+app-text/docbook-dsssl-stylesheets
+app-text/docbook-sgml-dtd:4.5
+app-text/docbook-xml-dtd:4.5
+app-text/docbook-xsl-stylesheets
+dev-libs/libxml2
+dev-libs/libxslt
+"
+
+pkg_setup() {
+       use llvm && llvm-r1_pkg_setup
+
+       use server && CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup
+
+       use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Set proper run directory
+       sed "s|\(PGSOCKET_DIR\s\+\)\"/tmp\"|\1\"${EPREFIX}/run/postgresql\"|" \
+               -i src/include/pg_config_manual.h || die
+
+       # Rely on $PATH being in the proper order so that the correct
+       # install program is used for modules utilizing PGXS in both
+       # hardened and non-hardened environments. (Bug #528786)
+       sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die
+
+       use server || eapply "${FILESDIR}/${PN}-17.0-no-server.patch"
+
+       if use pam ; then
+               sed "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \
+                       -i src/backend/libpq/auth.c || \
+                       die 'PGSQL_PAM_SERVICE rename failed.'
+       fi
+
+       eapply_user
+}
+
+src_configure() {
+       # Fails to build with C23, fallback to the old default in < GCC 15
+       # for now: https://marc.info/?l=pgsql-bugs&m=173185132906874&w=2
+       append-cflags -std=gnu17
+
+       case ${CHOST} in
+               *-darwin*|*-solaris*)
+                       use nls && append-libs intl
+                       ;;
+       esac
+
+       export LDFLAGS_SL="${LDFLAGS}"
+       export LDFLAGS_EX="${LDFLAGS}"
+
+       local PO="${EPREFIX}"
+
+       local i uuid_config=""
+       if use uuid; then
+               for i in ${UTIL_LINUX_LIBC[@]}; do
+                       use ${i} && uuid_config="--with-uuid=e2fs"
+               done
+               [[ -z $uuid_config ]] && uuid_config="--with-uuid=ossp"
+       fi
+
+       local myconf="\
+               --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" \
+               --datadir="${PO}/usr/share/postgresql-${SLOT}" \
+               --includedir="${PO}/usr/include/postgresql-${SLOT}" \
+               --mandir="${PO}/usr/share/postgresql-${SLOT}/man" \
+               --sysconfdir="${PO}/etc/postgresql-${SLOT}" \
+               --with-system-tzdata="${PO}/usr/share/zoneinfo" \
+               $(use_enable debug) \
+               $(use_with icu) \
+               $(use_with kerberos gssapi) \
+               $(use_with ldap) \
+               $(use_with llvm) \
+               $(use_with lz4) \
+               $(use_with pam) \
+               $(use_with perl) \
+               $(use_with python) \
+               $(use_with readline) \
+               $(use_with ssl openssl) \
+               $(usex server "$(use_with systemd)" '--without-systemd') \
+               $(use_with tcl) \
+               ${uuid_config} \
+               $(use_with xml libxml) \
+               $(use_with xml libxslt) \
+               $(use_with zlib) \
+               $(use_with zstd) \
+               $(use_enable nls)"
+       if use alpha; then
+               myconf+=" --disable-spinlocks"
+       else
+               # Should be the default but just in case
+               myconf+=" --enable-spinlocks"
+       fi
+       econf ${myconf}
+}
+
+src_compile() {
+       emake
+       emake -C contrib
+       emake -C doc
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+       emake DESTDIR="${D}" install -C contrib
+
+       dodoc HISTORY
+
+       # man pages are already built, but if we have the target make them,
+       # they'll be generated from source before being installed so we
+       # manually install man pages.
+       # We use ${SLOT} instead of doman for postgresql.eselect
+       insinto /usr/share/postgresql-${SLOT}/man/
+       doins -r doc/src/sgml/man{1,3,7}
+       if ! use server; then
+               # Remove man pages for non-existent binaries
+               serverman=(
+                       initdb
+                       
pg_{archivecleanup,controldata,ctl,resetwal,rewind,standby}
+                       pg_{test_{fsync,timing},upgrade,waldump}
+                       post{gres,master}
+               )
+               for m in ${serverman[@]} ; do
+                       rm "${ED}/usr/share/postgresql-${SLOT}/man/man1/${m}.1"
+               done
+       fi
+       docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7}
+
+       # Create slot specific man pages
+       local bn f mansec slotted_name
+       for mansec in 1 3 7 ; do
+               local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}"
+
+               mkdir -p "${ED}"/usr/share/man/man${mansec} || die "making man 
dir"
+               pushd "${ED}"/usr/share/man/man${mansec} > /dev/null || die 
"pushd failed"
+
+               for f in 
"${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do
+                       bn=$(basename "${f}")
+                       slotted_name=${bn%.${mansec}}${SLOT}.${mansec}
+                       case ${bn} in
+                               TABLE.7|WITH.7)
+                                       echo ".so ${rel_manpath}/SELECT.7" > 
${slotted_name}
+                                       ;;
+                               *)
+                                       echo ".so ${rel_manpath}/${bn}" > 
${slotted_name}
+                                       ;;
+                       esac
+               done
+
+               popd > /dev/null
+       done
+
+       insinto /etc/postgresql-${SLOT}
+       newins src/bin/psql/psqlrc.sample psqlrc
+
+       # Don't delete libpg{port,common}.a (Bug #571046). They're always
+       # needed by extensions utilizing PGXS.
+       use static-libs || \
+               find "${ED}" -name '*.a' ! -name libpgport.a ! -name 
libpgcommon.a \
+                        -delete
+
+       # Make slot specific links to programs
+       local f bn
+       for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \
+                                       -mindepth 1 -maxdepth 1)
+       do
+               bn=$(basename "${f}")
+               dosym "../$(get_libdir)/postgresql-${SLOT}/bin/${bn}" \
+                         "/usr/bin/${bn}${SLOT/.}"
+       done
+
+       if use doc ; then
+               docinto html
+               dodoc doc/src/sgml/html/*
+       fi
+
+       if use server; then
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT}
+
+               sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \
+                       "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - 
${PN}-${SLOT}
+
+               if use systemd; then
+                       sed -e "s|@SLOT@|${SLOT}|g" -e 
"s|@LIBDIR@|$(get_libdir)|g" \
+                               "${FILESDIR}/${PN}.service-9.6-r1" | \
+                               systemd_newunit - ${PN}-${SLOT}.service
+                       newbin "${FILESDIR}"/${PN}-check-db-dir 
${PN}-${SLOT}-check-db-dir
+                       newtmpfiles "${FILESDIR}"/${PN}.tmpfiles 
${PN}-${SLOT}.conf
+               fi
+
+               use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account 
session
+
+               if use prefix ; then
+                       keepdir /run/postgresql
+                       fperms 1775 /run/postgresql
+               fi
+       fi
+}
+
+pkg_postinst() {
+       use server && use systemd && tmpfiles_process ${PN}-${SLOT}.conf
+       postgresql-config update
+
+       elog "If you need a global psqlrc-file, you can place it in:"
+       elog "    ${EROOT}/etc/postgresql-${SLOT}/"
+
+       if use server ; then
+               elog
+               elog "Gentoo specific documentation:"
+               elog "https://wiki.gentoo.org/wiki/PostgreSQL";
+               elog
+               elog "Official documentation:"
+               elog "https://www.postgresql.org/docs/${SLOT}/static/index.html";
+               elog
+               elog "The default location of the Unix-domain socket is:"
+               elog "    ${EROOT}/run/postgresql/"
+               elog
+               elog "Before initializing the database, you may want to edit 
PG_INITDB_OPTS"
+               elog "so that it contains your preferred locale in:"
+               elog "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+               elog
+               elog "Then, execute the following command to setup the initial 
database"
+               elog "environment:"
+               elog "    emerge --config =${CATEGORY}/${PF}"
+
+               if [[ -n ${REPLACING_VERSIONS} ]] ; then
+                       ewarn "If your system is using 'pg_stat_statements' and 
you are running a"
+                       ewarn "version of PostgreSQL ${SLOT}, we advise that 
you execute"
+                       ewarn "the following command after upgrading:"
+                       ewarn
+                       ewarn "ALTER EXTENSION pg_stat_statements UPDATE;"
+               fi
+       fi
+}
+
+pkg_prerm() {
+       if use server && [[ -z ${REPLACED_BY_VERSION} ]] ; then
+               ewarn "Have you dumped and/or migrated the ${SLOT} database 
cluster?"
+               ewarn 
"\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL";
+
+               ebegin "Resuming removal in 10 seconds (Control-C to cancel)"
+               sleep 10
+               eend 0
+       fi
+}
+
+pkg_postrm() {
+       postgresql-config update
+}
+
+pkg_config() {
+       use server || die "USE flag 'server' not enabled. Nothing to configure."
+
+       [[ -f "${EROOT}/etc/conf.d/postgresql-${SLOT}" ]] \
+               && source "${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       [[ -z "${PGDATA}" ]] && PGDATA="${EROOT}/etc/postgresql-${SLOT}/"
+       [[ -z "${DATA_DIR}" ]] \
+               && DATA_DIR="${EROOT}/var/lib/postgresql/${SLOT}/data"
+
+       # environment.bz2 may not contain the same locale as the current system
+       # locale. Unset and source from the current system locale.
+       if [ -f "${EROOT}/etc/env.d/02locale" ]; then
+               unset LANG
+               unset LC_CTYPE
+               unset LC_NUMERIC
+               unset LC_TIME
+               unset LC_COLLATE
+               unset LC_MONETARY
+               unset LC_MESSAGES
+               unset LC_ALL
+               source "${EROOT}/etc/env.d/02locale"
+               [ -n "${LANG}" ] && export LANG
+               [ -n "${LC_CTYPE}" ] && export LC_CTYPE
+               [ -n "${LC_NUMERIC}" ] && export LC_NUMERIC
+               [ -n "${LC_TIME}" ] && export LC_TIME
+               [ -n "${LC_COLLATE}" ] && export LC_COLLATE
+               [ -n "${LC_MONETARY}" ] && export LC_MONETARY
+               [ -n "${LC_MESSAGES}" ] && export LC_MESSAGES
+               [ -n "${LC_ALL}" ] && export LC_ALL
+       fi
+
+       einfo "You can modify the paths and options passed to initdb by 
editing:"
+       einfo "    ${EROOT}/etc/conf.d/postgresql-${SLOT}"
+       einfo
+       einfo "Information on options that can be passed to initdb are found 
at:"
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/creating-cluster.html";
+       einfo "    
https://www.postgresql.org/docs/${SLOT}/static/app-initdb.html";
+       einfo
+       einfo "PG_INITDB_OPTS is currently set to:"
+       if [[ -z "${PG_INITDB_OPTS}" ]] ; then
+               einfo "    (none)"
+       else
+               einfo "    ${PG_INITDB_OPTS}"
+       fi
+       einfo
+       einfo "Configuration files will be installed to:"
+       einfo "    ${PGDATA}"
+       einfo
+       einfo "The database cluster will be created in:"
+       einfo "    ${DATA_DIR}"
+       einfo
+
+       ebegin "Continuing initialization in 5 seconds (Control-C to cancel)"
+       sleep 5
+       eend 0
+
+       if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then
+               eerror "The given directory, '${DATA_DIR}', is not empty."
+               eerror "Modify DATA_DIR to point to an empty directory."
+               die "${DATA_DIR} is not empty."
+       fi
+
+       einfo "Creating the data directory ..."
+       if [[ ${EUID} == 0 ]] ; then
+               mkdir -p "$(dirname ${DATA_DIR%/})" || die "Couldn't parent 
dirs"
+               mkdir -m 0700 "${DATA_DIR%/}" || die "Couldn't make DATA_DIR"
+               chown -h postgres:postgres "${DATA_DIR%/}" || die "Couldn't 
chown"
+       fi
+
+       einfo "Initializing the database ..."
+
+       if [[ ${EUID} == 0 ]] ; then
+               su - postgres -c 
"${EROOT}/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -D \"${DATA_DIR}\" 
${PG_INITDB_OPTS}"
+       else
+               "${EROOT}"/usr/$(get_libdir)/postgresql-${SLOT}/bin/initdb -U 
postgres -D "${DATA_DIR}" ${PG_INITDB_OPTS}
+       fi
+
+       if [[ "${DATA_DIR%/}" != "${PGDATA%/}" ]] ; then
+               mv "${DATA_DIR%/}"/{pg_{hba,ident},postgresql}.conf "${PGDATA}"
+               ln -s "${PGDATA%/}"/{pg_{hba,ident},postgresql}.conf 
"${DATA_DIR%/}"
+       fi
+
+       # unix_socket_directory has no effect in postgresql.conf as it's
+       # overridden in the initscript
+       sed '/^#unix_socket_directories/,+1d' -i "${PGDATA%/}"/postgresql.conf
+
+       einfo "The autovacuum function, which was in contrib, has been moved to 
the main"
+       einfo "PostgreSQL functions starting with 8.1, and starting with 8.4 is 
now enabled"
+       einfo "by default. You can disable it in the cluster's:"
+       einfo "    ${PGDATA%/}/postgresql.conf"
+       einfo
+       if ! use systemd; then
+               einfo "The PostgreSQL server, by default, will log events to:"
+               einfo "    ${DATA_DIR%/}/postmaster.log"
+               einfo
+       fi
+       if use prefix ; then
+               einfo "The location of the configuration files have moved to:"
+               einfo "    ${PGDATA}"
+               einfo "To start the server:"
+               einfo "    pg_ctl start -D ${DATA_DIR} -o '-D ${PGDATA} 
--data-directory=${DATA_DIR}'"
+               einfo "To stop:"
+               einfo "    pg_ctl stop -D ${DATA_DIR}"
+               einfo
+               einfo "Or move the configuration files back:"
+               einfo "mv ${PGDATA}*.conf ${DATA_DIR}"
+       elif use systemd; then
+               einfo "You should use the 'postgresql-${SLOT}.service' unit to 
run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       else
+               einfo "You should use the 
'${EROOT}/etc/init.d/postgresql-${SLOT}' script to run PostgreSQL"
+               einfo "instead of 'pg_ctl'."
+       fi
+}
+
+src_test() {
+       if use server && [[ ${UID} -ne 0 ]] ; then
+               # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the 
same. We set
+               # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by 
Portage.
+               local old_ctype=${LC_CTYPE}
+               export LC_CTYPE=${LC_COLLATE}
+               emake check
+               export LC_CTYPE=${old_ctype}
+               einfo "If you think other tests besides the regression tests 
are necessary, please"
+               einfo "submit a bug including a patch for this ebuild to enable 
them."
+       else
+               use server || \
+                       ewarn 'Tests cannot be run without the "server" use 
flag enabled.'
+               [[ ${UID} -eq 0 ]] || \
+                       ewarn 'Tests cannot be run as root. Enable "userpriv" 
in FEATURES.'
+
+               ewarn 'Skipping.'
+       fi
+}

Reply via email to