46.12. Имена процедур Tcl #
В Postgres Pro одно имя функции может использоваться разными определениями функций, если они расположены в разных схемах или если они имеют разное число и типы аргументов. Tcl, однако, требует, чтобы имена всех процедур различались. PL/Tcl решает эту проблему, включая в состав внутреннего имени процедур Tcl имена типов аргументов, а затем прибавляя к внутреннему имени процедуры Tcl идентификатор объекта функции (OID), если нужно, чтобы имя отличалось от имён других ранее загруженных функций в рамках одного интерпретатора Tcl. Таким образом, функциям Postgres Pro с одним именем и разными типами аргументов так же будут соответствовать различные процедуры Tcl. Это обычно остаётся незамеченным для программиста PL/Tcl, но может проявиться при отладке.
В том числе по этой причине функция PL/Tcl не может напрямую вызвать другую функцию (то есть в рамках Tcl). Это можно сделать через SQL, использовав функцию spi_exec или связанную команду.
46.12. Tcl Procedure Names #
In Postgres Pro, the same function name can be used for different function definitions if the functions are placed in different schemas, or if the number of arguments or their types differ. Tcl, however, requires all procedure names to be distinct. PL/Tcl deals with this by including the argument type names in the internal Tcl procedure name, and then appending the function's object ID (OID) to the internal Tcl procedure name if necessary to make it different from the names of all previously-loaded functions in the same Tcl interpreter. Thus, Postgres Pro functions with the same name and different argument types will be different Tcl procedures, too. This is not normally a concern for a PL/Tcl programmer, but it might be visible when debugging.
For this reason among others, a PL/Tcl function cannot call another one directly (that is, within Tcl). If you need to do that, you must go through SQL, using spi_exec or a related command.