Der Versuch, Änderungen an max_stack_depth vorzunehmen mit select set_config('max_stack_depth', '512MB', false); bringt den im Postgresql-Protokoll angezeigten Fehler:
DETAIL: "max_stack_depth" must not exceed 7680kB.
HINT: Increase the platform's stack depth limit via "ulimit -s" or local equivalent.
tatsächlich existiert die folgende Zeile in limits.conf. Habe versucht, den Postgresql-Prozess mit prlimit zu aktualisieren und sogar den Server neu zu starten (OS:Ubuntu). Es wird nicht der gleiche Fehler gemeldet.
* soft stack 524288
Wenn Sie zum Benutzer postgres wechseln und die Stack-Größe mit ulimit -s überprüfen, ist sie bereits auf 512 MB eingestellt.
Dies zeigt, dass es kein ulimit -s gibt, um die Stapelgröße unter /etc zu ändern.
$ sudo grep -r ulimit /etc/*
/etc/init.d/lxd: ulimit -n 65536
/etc/vmware-tools/vm-support:runcmd "/tmp/ulimit-a.txt" ulimit -a
Es ist nicht sicher, warum postgresql diese Änderung immer noch nicht sieht?
Beste Antwort
Diese Lösung funktioniert unter Fedora Linux, sollte aber auch unter Ubuntu funktionieren. Das Problem ist, dass systemd nicht nur initd ersetzen will, sondern auch Sicherheitsfunktionen übernehmen will, die traditionell von Dingen wie /etc/security/limits.conf gehandhabt wurden. (Es gibt auch andere Bereiche, in denen es stört). Wenn systemd PostgreSQL startet, ignoriert es /etc/security/limits.conf und wendet seine eigenen Standardlimits an. Gehen Sie wie folgt vor, um sie zu ändern:
mkdir /etc/systemd/system/postgresql.service.d
cat > /etc/systemd/system/postgresql.service.d/postgresql.conf << XYZZY
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
LimitSTACK=infinity
XYZZY
systemctl daemon-reload
Diese Methode hat auch den zusätzlichen Vorteil, dass sie die Standardänderungen an Service-Unit-Dateien nicht beeinträchtigt, wenn sie upstream aktualisiert werden, aber Ihre Einstellungen dauerhaft außer Kraft setzt. Dieser hilfreiche Beitrag listet die anderen Grenzwerte auf, die durch die Systemkonfiguration festgelegt werden können.
Ich sollte beachten, dass ich zuerst versucht habe, das Limit auf 131072 zu setzen, aber als ich versuchte, PostgreSQL zu starten, bekam ich diesenFehler:
DETAIL: "max_stack_depth" must not exceed -384kB.
Durch die Änderung in infinity (unendlich) konnte PostgreSQL gestartet werden.