Sync from SUSE:SLFO:Main postgresql revision 07d0d8f10f280d6821b5471d35061c0c

This commit is contained in:
Adrian Schröter 2024-11-25 20:48:02 +01:00
parent b5b0df5773
commit e7b2243661
7 changed files with 232 additions and 10 deletions

3
postgresql-README Normal file
View File

@ -0,0 +1,3 @@
This is a dummy package to provide a dependency on the default
PostgreSQL version. For further information see the following file in
the postgresql package: /usr/share/doc/packages/postgresql/README.SUSE

110
postgresql-README.SUSE Normal file
View File

@ -0,0 +1,110 @@
PostgreSQL packages openSUSE and SUSE Linux Enterprise Server
=============================================================
This section describes the RPM package layout for PostgreSQL at
SUSE.
In certain situations (see "Upgrading PostgreSQL" below) it is needed
to have more than one version of PostgreSQL installed on a system at
the same time. For that SUSE has put the major version number into the
name of the package containing the respective PostgreSQL binaries,
e.g. postgresql14 or postgresql15. The package set for each major
version further consists of multiple subpackages containing different
aspects of a PostgreSQL installation such as postgresql14-server, or
postgresql15-contrib.
Inside the packages the files are moved from their standard locations
to a versioned location such as /usr/lib/postgresql14/bin or
/usr/lib/postgresql15/bin to avoid file conflicts. The
update-alternatives mechanism is used to create and maintain symbolic
links that cause one version (by default the highest installed
version) to re-appear in the standard locations.
There is also a set of unversioned packages (postgresql,
postgresql-server, etc.) that contains some common stuff that is
needed for all versions, like dependencies, scripts, or this
README. These packages also define the default version for a SUSE
product by recommending the respective binary packages.
By default, database data are stored under /var/lib/pgsql/data on SUSE
Linux.
Unix-Domain Socket Directory
============================
Traditionally a PostgreSQL server puts its unix domain sockets for
local client connections into the /tmp directory, which is not
intended for this kind of use and allows unprivileged users to start
rogue PostgreSQL servers. For that reason SUSE has moved the default
directory for these sockets to /run/postgresql and set the permissions
of that directory to only allow the postgres user and members of the
postgres group to start servers that have their sockets here.
A secondary socket is still also opened under /tmp for backwards
compatibility with old clients, but this is deprecated and should not
be used anymore in new deployments.
Upgrading PostgreSQL
====================
PostgreSQL databases are compatible among minor versions of the same
major version (e.g. 14.1, 14.2, 14.3), but need migration when
switching to a new major version (e.g. 14.x to 15.y).
Since version 9.1 PostgreSQL comes with the pg_upgrade tool that
simplifies and speeds up the migration of a PostgreSQL installation to
a new major version. Starting at version 11 logical replication
between two server instances provides anoter way of migrating a
PostgreSQL database to a new major version with minimal downtimes.
Before version 9.1 dump and restore was needed which is much slower,
but might still be usful in certain upgrade situations.
The following text will only explain migration through pg_upgrade. For
the other variants, please refer to the original documentation online
or in the respective postgresqlXX-docs package.
pg_upgrade needs to have the server binaries of both versions
available, so e.g. for migrating from version 14 to 15 both,
postgresql14-server and postgresql15-server need to be installed.
The following preconditions have to be fulfilled before data migration
can be started:
1. If not already done, the packages of the old PostgreSQL version
must be upgraded to the new packaging scheme through a maintenance
update.
2. The packages of the new PostgreSQL major version need to be
installed. As pg_upgrade is contained in the contrib subpackage, that
one has to be installed as well, at least for the migration period.
3. Unless pg_upgrade is used in link mode, the server must have
enough free disk space to temporarily hold a copy of the database
files. If the database instance was installed in the default
location, the needed space in megabytes can be determined by running
the follwing command as root: "du -hs /var/lib/pgsql/data". If space
is tight, it might help to run the "VACUUM FULL" SQL command on each
database in the instance to be migrated, but be aware that it might
take very long.
The latest upstream documentation for pg_upgrade including step by
step instructions for performing a database migration can be found
online under https://www.postgresql.org/docs/current/pgupgrade.html ,
or locally under
file:///usr/share/doc/packages/postgresqlXX/html/pgupgrade.html , if
the postgresqlXX-docs package is installed. XX is a place holder for
the respective major version here.
NOTE: The online documentation starts with explaining how you can
install PostgreSQL from the upstream sources (which is not necessary
when you install the SUSE RPMs) and also uses other directory names
(/usr/local instead of the update-alternatives based path as described
above).
For background information about the inner workings of pg_upgrade and
a performance comparison with the old dump and restore method, see
http://momjian.us/main/writings/pgsql/pg_upgrade.pdf .

View File

@ -41,7 +41,7 @@ Obsoletes: %{pg_name}-%{ext_name}-llvmjit < %{version}-%{release} \
%nil %nil
%pg_server_requires \ %pg_server_requires \
%{requires_eq %{pg_name}-server} \ %{requires_ge %{pg_name}-server} \
%if %{postgresql_has_llvm} \ %if %{postgresql_has_llvm} \
Recommends: %{pg_name}-llvmjit \ Recommends: %{pg_name}-llvmjit \
%pg_obsolete_llvm_subpackage \ %pg_obsolete_llvm_subpackage \

View File

@ -5,6 +5,7 @@ test -f $PG_SYSCONFIG && . $PG_SYSCONFIG
eval DATADIR=${POSTGRES_DATADIR:-~postgres/data} eval DATADIR=${POSTGRES_DATADIR:-~postgres/data}
OPTIONS=${POSTGRES_OPTIONS} OPTIONS=${POSTGRES_OPTIONS}
INITDB_OPTS=${POSTGRES_INITDB_OPTS}
PIDFILE=$DATADIR/postmaster.pid PIDFILE=$DATADIR/postmaster.pid
# #
@ -48,8 +49,8 @@ case "$1" in
if [ ! -f $DATADIR/PG_VERSION ]; then if [ ! -f $DATADIR/PG_VERSION ]; then
test -n "$POSTGRES_LANG" && export LC_ALL="$POSTGRES_LANG" test -n "$POSTGRES_LANG" && export LC_ALL="$POSTGRES_LANG"
install -d -m 700 ${DATADIR} && install -d -m 700 ${DATADIR} &&
echo "Initializing PostgreSQL $VERSION at location ${DATADIR}" echo "Initializing PostgreSQL $VERSION at location ${DATADIR} using options \"$INITDB_OPTS\""
/usr/bin/initdb --auth=ident $DATADIR > initlog 2>&1 || { /usr/bin/initdb $INITDB_OPTS $DATADIR > initlog 2>&1 || {
echo "Initialisation failed. See $PWD/initlog ." echo "Initialisation failed. See $PWD/initlog ."
exit 1 exit 1
} }

View File

@ -49,3 +49,19 @@ POSTGRES_TIMEOUT="600"
# If unset or empty $RC_LANG from /etc/sysconfig/language is used. # If unset or empty $RC_LANG from /etc/sysconfig/language is used.
# #
POSTGRES_LANG="" POSTGRES_LANG=""
## Path: Applications/PostgreSQL
## Description: The PostgreSQL Database System
## Type: string()
## Default: "--auth=ident"
## ServiceRestart: ""
#
# When PostgreSQL gets started while no database cluster exists under
# the directory stored in the POSTGRES_DATADIR variable, the initdb
# tool gets called with that directory to initialize a new cluster.
# Additional options can be passed to initdb via this variable.
# Alternatively initdb can be called manually to initialize the
# database cluster prior to starting the PostgreSQL server for the
# first time.
#
POSTGRES_INITDB_OPTS="--auth=ident"

View File

@ -1,3 +1,68 @@
-------------------------------------------------------------------
Wed Nov 13 15:52:30 UTC 2024 - Reinhard Max <max@suse.com>
- Bump major to 17 for SLE.
-------------------------------------------------------------------
Thu Sep 19 11:30:29 UTC 2024 - Reinhard Max <max@suse.com>
- Bump major and default to 17 for Factory and TW.
-------------------------------------------------------------------
Thu Sep 12 08:28:00 UTC 2024 - Reinhard Max <max@suse.com>
- bsc#1230423: Relax the dependency of extensions on the server
version from exact major.minor to greater or equal, after Tom
Lane confirmed on the PostgreSQL packagers list that ABI
stability is being taken care of between minor releases.
-------------------------------------------------------------------
Tue Feb 27 15:28:14 UTC 2024 - Reinhard Max <max@suse.com>
- bsc#1219340: The last fix was not correct. Improve it by removing
the dependency again and call fillup only if it is installed.
-------------------------------------------------------------------
Thu Feb 8 12:09:14 UTC 2024 - Reinhard Max <max@suse.com>
- bsc#1219340: Require fillup.
-------------------------------------------------------------------
Fri Oct 13 16:58:03 UTC 2023 - Reinhard Max <max@suse.com>
- Interlock version and release of all noarch packages except for
the postgresql-docs.
-------------------------------------------------------------------
Thu Sep 14 13:03:29 UTC 2023 - Reinhard Max <max@suse.com>
- Bump default to 16 on Factory.
-------------------------------------------------------------------
Mon Aug 7 13:05:52 UTC 2023 - Reinhard Max <max@suse.com>
- Bump major version to prepare for PostgreSQL 16, but keep
default at 15 for now on Factory.
-------------------------------------------------------------------
Tue May 23 11:45:10 UTC 2023 - Reinhard Max <max@suse.com>
- boo#1122892: Add a sysconfig variable for initdb.
-------------------------------------------------------------------
Mon May 15 14:17:11 UTC 2023 - Reinhard Max <max@suse.com>
- Overhaul postgresql-README.SUSE and move it from the binary
package to the noarch wrapper package.
- bsc#1179231: Add an explanation for the /tmp -> /run/postgresql
move and permission change.
- Add postgresql-README as a separate source file.
-------------------------------------------------------------------
Mon Mar 27 17:10:16 UTC 2023 - Reinhard Max <max@suse.com>
- bsc#1209208: Drop hard dependency on systemd
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Jan 9 09:22:55 UTC 2023 - Reinhard Max <max@suse.com> Mon Jan 9 09:22:55 UTC 2023 - Reinhard Max <max@suse.com>

View File

@ -15,8 +15,8 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/ # Please submit bugfixes or comments via http://bugs.opensuse.org/
# #
%define pgmajor 15 %define pgmajor 17
%define defaultpackage postgresql%pgmajor %define defaultpackage postgresql17
%if ! %{defined _rpmmacrodir} %if ! %{defined _rpmmacrodir}
%define _rpmmacrodir %{_rpmconfigdir}/macros.d %define _rpmmacrodir %{_rpmconfigdir}/macros.d
@ -84,6 +84,8 @@ Source6: postgresql-script
Source7: postgresql-install-alternatives Source7: postgresql-install-alternatives
Source8: postgresql-extensions-macros Source8: postgresql-extensions-macros
Source9: postgresql.sysusers Source9: postgresql.sysusers
Source10: postgresql-README.SUSE
Source11: postgresql-README
%if 0%{?suse_version} > 1100 %if 0%{?suse_version} > 1100
%define fwdir /etc/sysconfig/SuSEfirewall2.d/services %define fwdir /etc/sysconfig/SuSEfirewall2.d/services
@ -109,8 +111,8 @@ package.
Summary: The Programs Needed to Create and Run a PostgreSQL Server Summary: The Programs Needed to Create and Run a PostgreSQL Server
Group: Productivity/Databases/Servers Group: Productivity/Databases/Servers
Provides: postgresql-server-noarch = %version-%release Provides: postgresql-server-noarch = %version-%release
Requires: postgresql-server-implementation
Requires: postgresql = %version-%release Requires: postgresql = %version-%release
Requires: postgresql-server-implementation
Recommends: %defaultpackage-server Recommends: %defaultpackage-server
%if 0%{?suse_version} >= 1315 %if 0%{?suse_version} >= 1315
%if %{with sysusers} %if %{with sysusers}
@ -126,7 +128,7 @@ Provides: postgresql-init = %version.0-%release
Obsoletes: postgresql-init < %version.0-%release Obsoletes: postgresql-init < %version.0-%release
%if %{with systemd} %if %{with systemd}
BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(systemd)
%{?systemd_requires} %{?systemd_ordering}
%else %else
Requires(postun): %insserv_prereq Requires(postun): %insserv_prereq
%endif %endif
@ -146,6 +148,7 @@ PostgreSQL databases.
Summary: PostgreSQL server development header files and utilities Summary: PostgreSQL server development header files and utilities
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Provides: postgresql-server-devel-noarch = %version-%release Provides: postgresql-server-devel-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-server-devel-implementation Requires: postgresql-server-devel-implementation
Recommends: %defaultpackage-server-devel Recommends: %defaultpackage-server-devel
@ -163,6 +166,7 @@ applications, see the %defaultpackage-devel package.
Summary: Just-in-time compilation support for PostgreSQL Summary: Just-in-time compilation support for PostgreSQL
Group: Productivity/Databases/Servers Group: Productivity/Databases/Servers
Provides: postgresql-llvmjit-noarch = %version-%release Provides: postgresql-llvmjit-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-llvmjit-implementation Requires: postgresql-llvmjit-implementation
Recommends: %defaultpackage-llvmjit Recommends: %defaultpackage-llvmjit
@ -181,6 +185,7 @@ queries.
Summary: Helper package to pull all dependencies to build with llvm support Summary: Helper package to pull all dependencies to build with llvm support
Group: Productivity/Databases/Servers Group: Productivity/Databases/Servers
Provides: postgresql-llvmjit-devel-noarch = %version-%release Provides: postgresql-llvmjit-devel-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-server-devel-noarch Requires: postgresql-server-devel-noarch
Requires: postgresql-llvmjit-devel-implementation Requires: postgresql-llvmjit-devel-implementation
@ -199,6 +204,7 @@ Otherwise it will just pull the postgresqlXY-server-devel package
Summary: The test suite for PostgreSQL Summary: The test suite for PostgreSQL
Group: Productivity/Databases/Servers Group: Productivity/Databases/Servers
Provides: postgresql-test-noarch = %version-%release Provides: postgresql-test-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-test-implementation Requires: postgresql-test-implementation
Recommends: %defaultpackage-implementation Recommends: %defaultpackage-implementation
@ -229,6 +235,7 @@ postgresql package.
Summary: Contributed Extensions and Additions to PostgreSQL Summary: Contributed Extensions and Additions to PostgreSQL
Group: Productivity/Databases/Tools Group: Productivity/Databases/Tools
Provides: postgresql-contrib-noarch = %version-%release Provides: postgresql-contrib-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-contrib-implementation Requires: postgresql-contrib-implementation
Recommends: %defaultpackage-contrib Recommends: %defaultpackage-contrib
@ -253,6 +260,7 @@ Provides: pkgconfig(libecpg) = %{version}-%{release}
Provides: pkgconfig(libecpg_compat) = %{version}-%{release} Provides: pkgconfig(libecpg_compat) = %{version}-%{release}
Provides: pkgconfig(libpgtypes) = %{version}-%{release} Provides: pkgconfig(libpgtypes) = %{version}-%{release}
Provides: pkgconfig(libpq) = %{version}-%{release} Provides: pkgconfig(libpq) = %{version}-%{release}
Requires: postgresql = %version-%release
Requires: postgresql-devel-implementation Requires: postgresql-devel-implementation
Recommends: %defaultpackage-devel Recommends: %defaultpackage-devel
@ -272,6 +280,7 @@ which will interact with a PostgreSQL server.
Summary: The PL/Tcl, PL/Perl, and PL/Python procedural languages for PostgreSQL Summary: The PL/Tcl, PL/Perl, and PL/Python procedural languages for PostgreSQL
Group: Productivity/Databases/Servers Group: Productivity/Databases/Servers
Provides: postgresql-plperl-noarch = %version-%release Provides: postgresql-plperl-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-plperl-implementation Requires: postgresql-plperl-implementation
Recommends: %defaultpackage-plperl Recommends: %defaultpackage-plperl
@ -289,6 +298,7 @@ functions, and triggers.
Summary: The PL/Python Procedural Languages for PostgreSQL Summary: The PL/Python Procedural Languages for PostgreSQL
Group: Productivity/Databases/Servers Group: Productivity/Databases/Servers
Provides: postgresql-plpython-noarch = %version-%release Provides: postgresql-plpython-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-plpython-implementation Requires: postgresql-plpython-implementation
Recommends: %defaultpackage-plpython Recommends: %defaultpackage-plpython
@ -306,6 +316,7 @@ functions, and triggers.
Summary: PL/Tcl Procedural Language for PostgreSQL Summary: PL/Tcl Procedural Language for PostgreSQL
Group: Productivity/Databases/Tools Group: Productivity/Databases/Tools
Provides: postgresql-pltcl-noarch = %version-%release Provides: postgresql-pltcl-noarch = %version-%release
Requires: postgresql = %version-%release
Requires: postgresql-pltcl-implementation Requires: postgresql-pltcl-implementation
Recommends: %defaultpackage-pltcl Recommends: %defaultpackage-pltcl
@ -322,10 +333,13 @@ and triggers.
%prep %prep
%build %build
%if %{with sysusers} %if %{with sysusers}
%sysusers_generate_pre %{SOURCE9} %{name}-server %{name}-server.conf %sysusers_generate_pre %{SOURCE9} %{name}-server %{name}-server.conf
%endif %endif
echo "This is a dummy package to provide a dependency on the default PostgreSQL version." > README
cp %{SOURCE10} README.SUSE
cp %{SOURCE11} README
%install %install
mkdir -p %buildroot/var/lib/pgsql/ mkdir -p %buildroot/var/lib/pgsql/
@ -382,6 +396,7 @@ getent passwd postgres > /dev/null ||
-c "PostgreSQL Server" -u 26 postgres -c "PostgreSQL Server" -u 26 postgres
%endif %endif
%if %{with systemd} %if %{with systemd}
if test -x /usr/bin/systemctl; then
%service_add_pre postgresql.service %service_add_pre postgresql.service
# Save the "enabled" and "active" state across the transition of # Save the "enabled" and "active" state across the transition of
@ -393,11 +408,15 @@ if [ $1 -ge 1 ]; then \
fi fi
systemctl is-active postgresql.service &>/dev/null && touch %aflag ||: systemctl is-active postgresql.service &>/dev/null && touch %aflag ||:
fi fi
fi
%endif %endif
%post server %post server
if [ -x /bin/fillup ]; then
%fillup_only -n postgresql %fillup_only -n postgresql
fi
%if %{with systemd} %if %{with systemd}
if test -x /usr/bin/systemctl; then
PROFILE="/var/lib/pgsql/.bash_profile" PROFILE="/var/lib/pgsql/.bash_profile"
if test -r "$PROFILE" && test "`cat $PROFILE`" = "/usr/share/postgresql/bash_profile" if test -r "$PROFILE" && test "`cat $PROFILE`" = "/usr/share/postgresql/bash_profile"
then then
@ -408,21 +427,26 @@ then
fi fi
%tmpfiles_create %_tmpfilesdir/postgresql.conf %tmpfiles_create %_tmpfilesdir/postgresql.conf
%service_add_post postgresql.service %service_add_post postgresql.service
fi
%endif %endif
%preun server %preun server
%if %{with systemd} %if %{with systemd}
if test -x /usr/bin/systemctl; then
# Cannot use systemd macros here, because they're doing too much # Cannot use systemd macros here, because they're doing too much
/usr/bin/systemctl --no-reload disable postgresql.service || : /usr/bin/systemctl --no-reload disable postgresql.service || :
fi
%else %else
%stop_on_removal postgresql %stop_on_removal postgresql
%endif %endif
%postun server %postun server
%if %{with systemd} %if %{with systemd}
if test -x /usr/bin/systemctl; then
# Cannot use systemd macros here, because they're doing too much # Cannot use systemd macros here, because they're doing too much
rm -f "/var/lib/systemd/migrated/postgresql" rm -f "/var/lib/systemd/migrated/postgresql"
/usr/bin/systemctl daemon-reload || : /usr/bin/systemctl daemon-reload || :
fi
%else %else
%insserv_cleanup %insserv_cleanup
@ -430,6 +454,7 @@ rm -f "/var/lib/systemd/migrated/postgresql"
%if %{with systemd} %if %{with systemd}
%posttrans server %posttrans server
if test -x /usr/bin/systemctl; then
# Save the "enabled" and "active" state across the transition of # Save the "enabled" and "active" state across the transition of
# ownership of postgresql.service from postgresql-init to # ownership of postgresql.service from postgresql-init to
# postgresql-server. # postgresql-server.
@ -437,15 +462,17 @@ if test -f %eflag; then
rm -f %eflag rm -f %eflag
systemctl enable postgresql.service systemctl enable postgresql.service
fi fi
if test -f %aflag; then if test -f %aflag; then
rm -f %aflag rm -f %aflag
systemctl start postgresql.service systemctl start postgresql.service
fi fi
fi
%endif %endif
%files %files
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc README %doc README.SUSE
%dir /usr/share/postgresql %dir /usr/share/postgresql
/usr/share/postgresql/install-alternatives /usr/share/postgresql/install-alternatives