42.11. Конфигурация PL/Tcl #
В этом разделе описываются параметры конфигурации, влияющие на работу PL/Tcl.
pltcl.start_proc
(string
) #В этом параметре, если он не пуст, задаётся имя (возможно, дополненное схемой) функции на языке PL/Tcl без параметров, которая будет выполняться, когда для PL/Tcl будет создаваться новый экземпляр Tcl. Такая функция может выполнять инициализацию в рамках сеанса, например, загружать дополнительный код Tcl. Новый интерпретатор Tcl создаётся при первом выполнении какой-либо функции PL/Tcl в сеансе базы данных или когда требуется дополнительный интерпретатор из-за того, что функция PL/Tcl была вызвана новой ролью SQL.
Указанная функция должна быть написана на языке
pltcl
и не должна иметь свойствоSECURITY DEFINER
. (Благодаря этим ограничениям эта функция будет запускаться в интерпретаторе, который она должна инициализировать.) Текущий пользователь должен иметь право и на её выполнение тоже.Если эта функция завершится ошибкой, эта ошибка прервёт вызов функции, которой потребовался новый интерпретатор, и распространится в вызывающий запрос, приводя к прерыванию текущей транзакции или подтранзакции. Любые действия, уже произведённые в среде Tcl, отменены не будут; однако этот интерпретатор более не будет использоваться. При следующей попытке использования этого языка последует повторная попытка инициализации со свежим интерпретатором Tcl.
Изменять этот параметр разрешено только суперпользователям. Хотя изменить его можно в рамках сеанса, такие изменения не повлияют на работу интерпретаторов Tcl, созданных ранее.
pltclu.start_proc
(string
) #Это параметр полностью аналогичен
pltcl.start_proc
, но применяется к PL/TclU. Указанная функция должна быть написана на языкеpltclu
.
42.11. PL/Tcl Configuration #
This section lists configuration parameters that affect PL/Tcl.
-
pltcl.start_proc
(string
) # This parameter, if set to a nonempty string, specifies the name (possibly schema-qualified) of a parameterless PL/Tcl function that is to be executed whenever a new Tcl interpreter is created for PL/Tcl. Such a function can perform per-session initialization, such as loading additional Tcl code. A new Tcl interpreter is created when a PL/Tcl function is first executed in a database session, or when an additional interpreter has to be created because a PL/Tcl function is called by a new SQL role.
The referenced function must be written in the
pltcl
language, and must not be markedSECURITY DEFINER
. (These restrictions ensure that it runs in the interpreter it's supposed to initialize.) The current user must have permission to call it, too.If the function fails with an error it will abort the function call that caused the new interpreter to be created and propagate out to the calling query, causing the current transaction or subtransaction to be aborted. Any actions already done within Tcl won't be undone; however, that interpreter won't be used again. If the language is used again the initialization will be attempted again within a fresh Tcl interpreter.
Only superusers can change this setting. Although this setting can be changed within a session, such changes will not affect Tcl interpreters that have already been created.
-
pltclu.start_proc
(string
) # This parameter is exactly like
pltcl.start_proc
, except that it applies to PL/TclU. The referenced function must be written in thepltclu
language.