I committed this change. I also did some more research and this change
in PostgreSQL 18 is deliberate:
https://github.com/postgres/postgres/commit/810a8b1c8051d4e8822967a96f133692698386de

Jeremy

On 12/05 06:43, Jeremy Evans wrote:
> I received a report that the default semmns limit is no longer sufficient
> to start PostgreSQL. Instead of reducing the number of max connections,
> it just will not start. Here's the initdb output you get with the default
> limits:
> 
> 
> running bootstrap script ... 2025-12-05 18:41:22.252 PST [50524] FATAL: could 
> not create semaphores: No space left on device
> 2025-12-05 18:41:22.252 PST [50524] DETAIL:  Failed system call was 
> semget(311051, 17, 03600).
> 2025-12-05 18:41:22.252 PST [50524] HINT:  This error does *not* mean that 
> you have run out of disk space.  It occurs when either the system limit for 
> the maximum number of semaphore sets (SEMMNI), or the system wide maximum 
> number of semaphores (SEMMNS), would be exceeded.  You need to raise the 
> respective kernel parameter.  Alternatively, reduce PostgreSQL's consumption 
> of semaphores by reducing its "max_connections" parameter.
>         The PostgreSQL documentation contains more information about 
> configuring your system for PostgreSQL.
> child process exited with exit code 1
> initdb: removing contents of data directory "/var/postgresql/data"
> 
> 
> The postgresql-server pkg README has recommended these limits for a
> long time:
> 
> kern.seminfo.semmni=256
> kern.seminfo.semmns=2048
> 
> I think we should adjust the text of the README to reflect the
> behavior change starting in PostgreSQL 18. 
> 
> OKs?
> 
> Thanks,
> Jeremy
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/databases/postgresql/Makefile,v
> retrieving revision 1.314
> diff -u -p -u -p -r1.314 Makefile
> --- Makefile  23 Nov 2025 03:05:13 -0000      1.314
> +++ Makefile  6 Dec 2025 02:35:03 -0000
> @@ -9,6 +9,7 @@ VERSION=      18.1
>  PREV_MAJOR=  17
>  DISTNAME=    postgresql-${VERSION}
>  PKGNAME-main=        postgresql-client-${VERSION}
> +REVISION-server=0
>  
>  DPB_PROPERTIES=      parallel
>  
> Index: pkg/README-server
> ===================================================================
> RCS file: /cvs/ports/databases/postgresql/pkg/README-server,v
> retrieving revision 1.37
> diff -u -p -u -p -r1.37 README-server
> --- pkg/README-server 1 Jun 2024 05:36:58 -0000       1.37
> +++ pkg/README-server 6 Dec 2025 02:35:03 -0000
> @@ -57,17 +57,19 @@ Restart PostgreSQL to allow these change
>  Tuning for busy servers
>  =======================
>  The default sizes in the GENERIC kernel for SysV semaphores are not
> -large enough for PostgreSQL to use the default max_connections
> -configuration value of 100, so PostgreSQL will use a smaller than
> -default max_connections if you do not increase the limits.  Adding the
> -following in /etc/sysctl.conf will be reasonable for many systems:
> +large enough for PostgreSQL.  Adding the following in /etc/sysctl.conf
> +should allow PostgreSQL to start:
>  
>       kern.seminfo.semmni=256
>       kern.seminfo.semmns=2048
>  
> +While you can start PostgreSQL with smaller limits, it's probably
> +not wise unless you are very resource constrained.
> +
>  You may also want to tune the max_connections value in the
>  postgresql.conf file to increase the number of connections to the
> -backend.
> +backend.  However, for busy servers with many connections, these
> +limits may need to be increased further.
>  
>  By default, the _postgresql user, and so the postmaster and backend
>  processes run in the login(1) class of "postgresql". On a busy server,
> @@ -77,10 +79,6 @@ more memory, etc.
>  
>  The capability database file is located at /etc/login.conf.d/postgresql
>   
> -For more than about 250 connections, these numbers should be
> -increased. Please report any changes and experiences to the package
> -maintainers so that we can update this file for future versions.
> -
>  Upgrade Howto (for a major upgrade)
>  ===================================
>  If you didn't install PostgreSQL by following this README,

Reply via email to