commit:     80b95699c977805315c34d7af47c0b9119d2f277
Author:     Patrick Lauer <patrick <AT> gentoo <DOT> org>
AuthorDate: Thu Nov 14 14:51:30 2024 +0000
Commit:     Patrick Lauer <patrick <AT> gentoo <DOT> org>
CommitDate: Thu Nov 14 14:51:58 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=80b95699

dev-db/postgresql: add 12.21, 13.17, 14.14, 15.9, 16.5, 17.1

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

 dev-db/postgresql/Manifest                |   6 +
 dev-db/postgresql/postgresql-12.21.ebuild | 445 ++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-13.17.ebuild | 457 +++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-14.14.ebuild | 457 +++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-15.9.ebuild  | 459 +++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-16.5.ebuild  | 460 +++++++++++++++++++++++++++++
 dev-db/postgresql/postgresql-17.1.ebuild  | 473 ++++++++++++++++++++++++++++++
 7 files changed, 2757 insertions(+)

diff --git a/dev-db/postgresql/Manifest b/dev-db/postgresql/Manifest
index 756c1299d053..729f91c27c7e 100644
--- a/dev-db/postgresql/Manifest
+++ b/dev-db/postgresql/Manifest
@@ -1,6 +1,12 @@
 DIST postgresql-12.20.tar.bz2 21256573 BLAKE2B 
f2611fa2d930b49d7f2bef9b1b77c41c7aa14eccd5e6a487daf4423589f6dd24ad1e17c30b2b926050dcd976e9d8e711b2792aba4409c4015ceb9fd5e18ef9e4
 SHA512 
720da6cb37209be90f8492d996d9fac90586943273a58691fde6e7855bf36bc5003a4b8be88cdcd32fa9eca3c5cb877af9573cac5e641cf7a4346c1acf935741
+DIST postgresql-12.21.tar.bz2 21298608 BLAKE2B 
f6db7285dbd126755d76d47b8af0657c65bed18ed02287cae4c4f1a9c5630cb8dff33c82b5fd7f400d5321a0a398d560764ba4c3994fc7986ef30ad883b7ca7c
 SHA512 
18bf689fb33db2d1f18035edf36ce475da5677ace663462f9f895312ed83715787f3fb5b7f12686dd2d7b6debc95348e4477c4a44b9cebe7ac5b98de0eb13656
 DIST postgresql-13.16.tar.bz2 21639411 BLAKE2B 
546efa5deb024150941973426b0d62e9aa87795eab58139aa569919033e4728c0f4b2d5710ca4c0c77b15dc918caada66a8dab8744e5d00cc7a1f146ca1e40d5
 SHA512 
e874c77e2d1d27d724f45c576c9d815da55f36712d67e3ec0a1f14ce4ac535fb39b6f23cdcd818cff05788e2c1e12f79572d90f8c145d7478aa35157b0b40679
+DIST postgresql-13.17.tar.bz2 21681613 BLAKE2B 
027ccfedcf4b32dc1f21ee1668c957f2e43db2299309520a4451a3a59244a8cde4d5a787d26238269be057dbc8ad27b650f307d184f614cf54f5f727d2628957
 SHA512 
7a9ad8a32b4b156b510d98f6f89dcc4e8e6091281523ee4a4f0ca2cdaf9aba9b3ebffca3572a1ed45d551a4f552b874de389b246a17174c04a3abc5fd1bb2b7c
 DIST postgresql-14.13.tar.bz2 22414381 BLAKE2B 
7b3cb0ea33a8517f9c3627dac8abba4e5f3ba97ecde21a0a605eb31174363baae73f94b9841360001ab01c402b7a3b65bf067c4dbe1689782ab7f44c553d4d12
 SHA512 
816e15b619a965b32a3afddebbf9cf5aabacc2440e88b11b0743767a353fe6966503c0e2a08c19d2de9705895f7aedadcf105732d0d3494c61402d379770c6d7
+DIST postgresql-14.14.tar.bz2 22451431 BLAKE2B 
cb15c251f613aa617930f787ae83baf2fa5d931ffe01177e2c038c19a2aa439ad04336d4e202f8c19f339fc875e6402d88cd9833d4d03e16f801e536c130cc43
 SHA512 
993f369fb405d6cf5b5ebc57a970cdc7a6fa08a9324924a5c5e59b3518f13c73362659bfe579e6d0264d1edac540245d876bcc41a7d4bd31559ce202cfa1cdc3
 DIST postgresql-15.8.tar.bz2 23119460 BLAKE2B 
15103c54464217fe2a327cc2e2fe242cfd41ea21365398670883f76cb82a12bb40d60f087676bb1ea294ed688a15a0a147ef121a9136aca79486db7910d12717
 SHA512 
da610d878819179fcafe8adf6cbe72e188537dbaff82457c67013f9089ae8cbb1f6d8c4d5ea62e4ef54c3e2a90060bd1f36b71b8531354279181e574d903940c
+DIST postgresql-15.9.tar.bz2 23135232 BLAKE2B 
ebb0b6bb3dde72ac9c173bab1cd62e92cfedb8ccd698e868774499f6e90d071aad57e02611bf717905205c27fb967252d55ef7908595106e66d5289eb84932ac
 SHA512 
eb8e85e136e5e3f2e9da1fffce06ffda3fdd2001d46153e1a7e02983bd1fcb29a92bec3cbf1fec48a4505b68a9360d24acf45e96a3ce94272833ba45096e8a1b
 DIST postgresql-16.4.tar.bz2 24765786 BLAKE2B 
5ea2661b8ee86fe26e095377e3eede77dc94f40f352db4f0c12038f23b71fea6453f08ba43a62e17dd51ce4eb89e9a82cd06a31f122c1547fd187c58f9fec080
 SHA512 
f2070299f0857a270317ac984f8393374cf00d4f32a082fe3c5481e36c560595ea711fed95e40d1bc90c5089edf8f165649d443d8b9c68614e1c83fc91268e96
+DIST postgresql-16.5.tar.bz2 24854528 BLAKE2B 
c1a7fb0f46889358bf700ef0ba3e776032433388933293f6582ad9777c30e0912810ad7eefa9fa31068d974156bc623b746061cf9ce9216bee0158a84c9f3a0f
 SHA512 
aec47744284c5a593f4223de26187dd4b00e27a8a8948c6b7d24ca522eb6b4d0098ec956e80f37d5a3a841d18e45e4a21e7323e33af91eff24e1b2c59577bef1
 DIST postgresql-17.0.tar.bz2 21419388 BLAKE2B 
37c39deccccfcffa73ab2c6887a797d113757cdbe4203dfb1dce499a2f1599716ce42c2c56c9d82d967d499c28eddc00f3d44dfd52684270bdb2f2e5be8e2265
 SHA512 
ae6741298abe986c9f09a6eee9fa2df26c3bbdffcbd0ff3f33332456e09f95195e4535f00a9437f2877e03e2e43a78be9a355303e7cf43bcb688b657ca7289f3
+DIST postgresql-17.1.tar.bz2 21410991 BLAKE2B 
324e64ed2243c70ba6046b4f495cb510943b63b2c5efb52fabc7a3f4101285ad068057a561a5bb64ded7be69bfc10e1d4df7d66d1a589132d14424974ab82f94
 SHA512 
41bd56ea5d2c3d41bd273894a056bd10244b33186746b63918f03671ba548551e02694f8215f09c6408c4dd6bb6ba0e87dec612560e8a267f5c5734b177e70a0

diff --git a/dev-db/postgresql/postgresql-12.21.ebuild 
b/dev-db/postgresql/postgresql-12.21.ebuild
new file mode 100644
index 000000000000..1a08e9da23e2
--- /dev/null
+++ b/dev-db/postgresql/postgresql-12.21.ebuild
@@ -0,0 +1,445 @@
+# Copyright 1999-2024 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..18} )
+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 ~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 '
+       sys-devel/clang:${LLVM_SLOT}
+       sys-devel/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() {
+       # 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}-12.1-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
+
+       econf \
+               --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 !alpha spinlocks) \
+               $(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)
+}
+
+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
+               emake check
+
+               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-13.17.ebuild 
b/dev-db/postgresql/postgresql-13.17.ebuild
new file mode 100644
index 000000000000..042744be95a0
--- /dev/null
+++ b/dev-db/postgresql/postgresql-13.17.ebuild
@@ -0,0 +1,457 @@
+# Copyright 1999-2024 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 '
+       sys-devel/clang:${LLVM_SLOT}
+       sys-devel/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.14.ebuild 
b/dev-db/postgresql/postgresql-14.14.ebuild
new file mode 100644
index 000000000000..85b06fbed833
--- /dev/null
+++ b/dev-db/postgresql/postgresql-14.14.ebuild
@@ -0,0 +1,457 @@
+# Copyright 1999-2024 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 '
+       sys-devel/clang:${LLVM_SLOT}
+       sys-devel/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.9.ebuild 
b/dev-db/postgresql/postgresql-15.9.ebuild
new file mode 100644
index 000000000000..89a38290439e
--- /dev/null
+++ b/dev-db/postgresql/postgresql-15.9.ebuild
@@ -0,0 +1,459 @@
+# Copyright 1999-2024 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 '
+       sys-devel/clang:${LLVM_SLOT}
+       sys-devel/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.5.ebuild 
b/dev-db/postgresql/postgresql-16.5.ebuild
new file mode 100644
index 000000000000..9561cb95eadc
--- /dev/null
+++ b/dev-db/postgresql/postgresql-16.5.ebuild
@@ -0,0 +1,460 @@
+# Copyright 1999-2024 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 '
+       sys-devel/clang:${LLVM_SLOT}
+       sys-devel/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.1.ebuild 
b/dev-db/postgresql/postgresql-17.1.ebuild
new file mode 100644
index 000000000000..1ad58bcafb27
--- /dev/null
+++ b/dev-db/postgresql/postgresql-17.1.ebuild
@@ -0,0 +1,473 @@
+# Copyright 1999-2024 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 '
+       sys-devel/clang:${LLVM_SLOT}
+       sys-devel/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() {
+       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