Error stack depth limit exceeded

Ответили на вопрос 2 человека. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.

Похожая ошибка с решением проблемы описана на этом сайте

При создании триггера возникает сообщение:

[54001] ERROR: stack depth limit exceeded Hint: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate. Where: SQL statement "UPDATE contact SET custom_field = NEW.custom_field WHERE user_id = OLD.user_ ...

При попытке изменить значение max_stack_depth в /etc/postgresql/10/main/postgresql.conf с последующим перезапуском /etc/init.d/postgresql restart сообщение не меняется


  • Вопрос задан

    27 июн. 2022

  • 234 просмотра

Пригласить эксперта

Сначала внимательно посмотрите на свой триггер, не пускаете ли вы его в бесконечную рекурсию. Нет, postgresql не будет вам мешать делать бесконечно-рекурсивный триггер и никак не будет препятствовать его выполнению до тех пор пока это будет возможно физически. И вот тут stack depth limit обычно и заканчивается первым.


  • Показать ещё
    Загружается…

09 февр. 2023, в 18:09

3500 руб./за проект

09 февр. 2023, в 18:08

5000 руб./за проект

09 февр. 2023, в 17:54

1000 руб./за проект

Минуточку внимания

Opening a job-page should work.

Request: /project/VisualVest/job/show/696c8b88-9e64-43e8-a0ad-df3b8fbef366
Message: ERROR: stack depth limit exceeded Hint: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
Caused by: ERROR: stack depth limit exceeded Hint: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
Class: ScheduledExecutionController
At Line: [455]
Code Snippet:
Stack Trace
org.postgresql.util.PSQLException: ERROR: stack depth limit exceeded
  Hint: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2412)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2125)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:297)
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428)
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)
	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:169)
	at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:117)
	at org.grails.datastore.gorm.GormStaticApi$_withCriteria_closure11.doCall(GormStaticApi.groovy:305)
	at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:302)
	at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:37)
	at org.grails.datastore.gorm.GormStaticApi.withCriteria(GormStaticApi.groovy:304)
	at rundeck.JobExec.parentList(JobExec.groovy:288)
	at rundeck.controllers.ScheduledExecutionController.show(ScheduledExecutionController.groovy:455)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:696)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1515)
	at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
	at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:519)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:582)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:261)
	at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:101)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at com.dtolabs.rundeck.server.filters.AuthFilter.doFilter(AuthFilter.java:74)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:519)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:529)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
	at org.eclipse.jetty.server.Server.handle(Server.java:446)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:271)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:246)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
	at java.lang.Thread.run(Thread.java:748)

Increasing the stack limit does not help. The job worked fine in rundeck 2.10

Я пытаюсь создать триггер, когда после вставки рисунка я хочу вставить его в таблицу In_Gallery или On_Loan, но не в обе. Когда я пытался создать функцию триггера, я продолжал получать сообщение об ошибке:

ERROR: stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.

Я не уверен, что с этим не так:

    CREATE OR REPLACE FUNCTION checkOnLoan()    
    RETURNS trigger AS
$$
    DECLARE    
       countGal numeric;
    BEGIN
            SELECT COUNT(*) INTO countGal FROM IN_GALLERY WHERE P_id = new.P_id;
            IF countGal = 0 THEN    
                INSERT INTO ON_LOAN VALUES (new.Certid, new.P_id, new.Insurer);
            ELSE
                RAISE EXCEPTION 'ALREADY IN GALLERY';
            END IF;
    RETURN new;
    END;
$$

LANGUAGE 'plpgsql';

CREATE TRIGGER OnLoan
    AFTER INSERT ON ON_LOAN
    FOR EACH ROW
    EXECUTE PROCEDURE checkOnLoan();

2 ответа

Непосредственной причиной вашей ошибки является бесконечный цикл, подобный объясненному в настоящее время принятому ответу. Но вы должны, вероятно, исправить больше, чем просто это. Триггер BEFORE улучшит ситуацию …

Функция запуска:

CREATE OR REPLACE FUNCTION check_onloan()
  RETURNS trigger AS
$$
BEGIN
   IF EXISTS (SELECT FROM in_gallery WHERE p_id = NEW.p_id) THEN
      RAISE EXCEPTION 'p_id % already in gallery!', NEW.p_id;
   END IF;
   RETURN NEW;  -- for BEFORE trigger
END
$$  LANGUAGE plpgsql;

Курок:

CREATE TRIGGER insert_after_on_loan
BEFORE INSERT ON on_loan             -- !!!
FOR EACH ROW EXECUTE PROCEDURE check_onloan();

RETURN NEW не имеет никакого смысла вообще для триггера AFTER. Руководство:

Возвращаемое значение игнорируется для триггеров уровня строки, запускаемых после операции, и поэтому они могут возвращать NULL.

Мое обоснованное предположение: вам нужен триггер BEFORE. Осталось только сделать исключение. Дешевле проверить перед выполнением работы, чем откатить ее позже. Для этой цели обычно эффективнее проверять существование с помощью IF EXISTS ..., а не подсчитывать. Тогда вам не нужно определять какие-либо переменные и нет DECLARE раздела.

Связанный:

  • PL / pgSQL проверяет, существует ли строка

  • Откат транзакции при ошибке запуска

Очевидно, вам нужен еще один зеркальный триггер для таблицы in_gallery в этом дизайне — который, вероятно, не идеален для начала.

Как бы вы это ни делали, будет оставшееся состояние гонки . При одновременной загрузке записи несколько транзакций могут попытаться ввести один и тот же p_id в обе таблицы практически в одно и то же время, но пока не увидеть p_id в таблице other , и введите его в обе таблицы. Это помогает держать транзакции короткими, чтобы минимизировать временные рамки, но проблема остается в принципе.

Одним чистым решением будет одна таблица painting с флагом boolean, указывающей ее статус. Это может иметь только одно состояние за раз. Детали зависят от вашей полной ситуации …

В стороне: пересмотреть регистр написания идентификаторов в CaMeL в Postgres.

  • Имена столбцов PostgreSQL чувствительны к регистру?


1

Erwin Brandstetter
2 Дек 2019 в 02:04

Вы снова INSERT в триггере AFTER INSERT, вызывая повторный запуск триггера в течение этой секунды INSERT, который снова INSERT запускает и запускает триггер заново, и так далее, и так далее , В какой-то момент стек исчерпан всеми вызовами этой функции, и вы получите ошибку.

Удалите INSERT из функций триггера и просто RETURN new. Возвращение new приведет к завершению оригинала INSERT. Для триггеров AFTER INSERT нет необходимости вручную INSERT в функции триггера.

Как:

CREATE OR REPLACE FUNCTION checkOnLoan()    
RETURNS trigger AS
$$
DECLARE    
    countGal numeric;
BEGIN
    SELECT COUNT(*) INTO countGal FROM IN_GALLERY WHERE P_id = new.P_id;
    IF countGal = 0 THEN    
        RETURN new;
    ELSE
        RAISE EXCEPTION 'ALREADY IN GALLERY';
    END IF;
END;
$$
LANGUAGE plpgsql;

И аналог для другой триггерной функции.


3

sticky bit
30 Ноя 2019 в 00:49

38 / 33 / 12

Регистрация: 31.05.2012

Сообщений: 586

1

02.08.2017, 16:09. Показов 4150. Ответов 5


всем привет! Создал тригер для инсерта и в результате вставки выдает ошибку

[54001] ERROR: stack depth limit exceeded Подсказка: Increase the configuration parameter «max_stack_depth» (currently 2048kB), after ensuring the platform’s stack depth limit is adequate. Где: SQL statement «SELECT 1 FROM ONLY «public».»posts» x WHERE «id» OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x» SQL statement «INSERT INTO public.post_content (htmlcode, type, post_id) VALUES (NEW.htmlcode, NEW.type, 37)» PL/pgSQL function increment_type_of_post_content() line 4 at SQL statem …
Details

Может кто подсказать чего он хочет?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



4733 / 3938 / 997

Регистрация: 29.08.2013

Сообщений: 25,248

Записей в блоге: 3

02.08.2017, 16:55

2

СУБД нужно угадать?



0



38 / 33 / 12

Регистрация: 31.05.2012

Сообщений: 586

02.08.2017, 18:24

 [ТС]

3

Цитата
Сообщение от qwertehok
Посмотреть сообщение

СУБД нужно угадать?

postgres



0



4733 / 3938 / 997

Регистрация: 29.08.2013

Сообщений: 25,248

Записей в блоге: 3

02.08.2017, 18:48

4

Цитата
Сообщение от Левиафам
Посмотреть сообщение

Подсказка: Increase the configuration parameter «max_stack_depth» (currently 2048kB), after ensuring the platform’s stack depth limit is adequate

читали?



0



38 / 33 / 12

Регистрация: 31.05.2012

Сообщений: 586

02.08.2017, 23:49

 [ТС]

5

Цитата
Сообщение от qwertehok
Посмотреть сообщение

читали?

ну это как-то странно что превышает 2 метра, может я что-то не так делаю….



0



1187 / 917 / 367

Регистрация: 02.09.2012

Сообщений: 2,790

03.08.2017, 04:54

6

Цитата
Сообщение от Левиафам
Посмотреть сообщение

может я что-то не так делаю…

Покажите тогда хотя бы код триггера, триггерной функции, ну и самого SQL-выражения, которое приводит к срабатыванию триггера.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

03.08.2017, 04:54

6

Понравилась статья? Поделить с друзьями:
  • Error ssl version or cipher mismatch chrome
  • Error ssl protocol error chromium gost
  • Error ssl protocol error bitrix
  • Error ssl peer certificate or ssh remote key was not ok insomnia
  • Error ssl intermediate chain is not valid