mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-13 19:57:53 +08:00
Improve hint message for ENOMEM failure from shmget().
It turns out that some platforms return ENOMEM for a request that violates SHMALL, whereas we were assuming that ENOSPC would always be used for that. Apparently the latter is a Linuxism while ENOMEM is the BSD tradition. Extend the ENOMEM hint to suggest that raising SHMALL might be needed. Per gripe from A.M. Backpatch to 9.0, but not further, because this doesn't seem important enough to warrant creating extra translation work in the stable branches. (If it were, we'd have figured this out years ago.)
This commit is contained in:
parent
167557b476
commit
b5cf172d2c
@ -10,7 +10,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/port/sysv_shmem.c,v 1.57 2010/07/06 19:18:57 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/port/sysv_shmem.c,v 1.57.2.1 2010/08/25 20:10:59 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -135,7 +135,13 @@ InternalIpcMemoryCreate(IpcMemoryKey memKey, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* Else complain and abort
|
||||
* Else complain and abort.
|
||||
*
|
||||
* Note: at this point EINVAL should mean that either SHMMIN or SHMMAX
|
||||
* is violated. SHMALL violation might be reported as either ENOMEM
|
||||
* (BSDen) or ENOSPC (Linux); the Single Unix Spec fails to say which
|
||||
* it should be. SHMMNI violation is ENOSPC, per spec. Just plain
|
||||
* not-enough-RAM is ENOMEM.
|
||||
*/
|
||||
ereport(FATAL,
|
||||
(errmsg("could not create shared memory segment: %m"),
|
||||
@ -157,7 +163,9 @@ InternalIpcMemoryCreate(IpcMemoryKey memKey, Size size)
|
||||
(unsigned long) size, NBuffers, MaxBackends) : 0,
|
||||
(errno == ENOMEM) ?
|
||||
errhint("This error usually means that PostgreSQL's request for a shared "
|
||||
"memory segment exceeded available memory or swap space. "
|
||||
"memory segment exceeded available memory or swap space, "
|
||||
"or exceeded your kernel's SHMALL parameter. You can either "
|
||||
"reduce the request size or reconfigure the kernel with larger SHMALL. "
|
||||
"To reduce the request size (currently %lu bytes), reduce "
|
||||
"PostgreSQL's shared_buffers parameter (currently %d) and/or "
|
||||
"its max_connections parameter (currently %d).\n"
|
||||
|
Loading…
Reference in New Issue
Block a user