EXECUTE format(......)
current_schema = public
(в коде EXECUTE нигде не меняется search_path)
Почему может изменяется current_schema?
Почему вы думаете, что она меняется?
Потому что использую current_scheme в следующей коианде и она уже не admin а public
А почему вы думаете, что она до того была не public? (И вообще, в каждом месте, где меняется схема или вы думаете, что меняется схема -- вставьте RAISE NOTICE на search_path и current_schemas('t') )
Так и сделал - куча операторов до execute не меняют схему а вот после execute схема меняется Поэтому и решил спросить что может менять схему
Format это ваша функция с выставленным search_path?
Так и покажыте результат. (На самом деле, если всё так то реалистичных варианта два -- у вас реально внутри там меняется схема или у вас pg_bounce не в session mode, который меняет подключения как хочет).
Нет - search_path выставляется в начале функции в которой дальше в теле происходить вызов execute format и вот после него происходит смена схемы
Ну, приведите всю функцыю -- подумаем, чо там как.
CREATE OR REPLACE FUNCTION admin.func ( func_name text; ) $body$ DECLARE BEGIN SET search_path TO 'admin', pg_temp; SELECT ....; PERFORM admin.func1(...); UPDATE .... VALUES (current_schema, ....); RAISE NOTICE '%', current_schema; // 'admin' EXECUTE format('SELECT "admin".%s()', func_name); RAISE NOTICE '%', current_schema; // 'public' UPDATE .... VALUES (current_schema, ....); END; $body$ LANGUAGE 'plpgsql' реальные имена и фамилии заменены на вымышленные но все в точности как приведено выше
Ну, теперь приведите текст func_name.
Точнее, конкретно admin.$func_name
Простая строка ''check_balance' - к примеру
Текст этой функцыи admin.check_balance.
там select + update
Обсуждают сегодня