Chapter 44. PL/Tcl — Tcl Procedural Language

|Chapter 44. PL/Tcl — Tcl Procedural Language|                             |                          |                  |                            |
|:------------------------------------------:|-----------------------------|--------------------------|------------------|----------------------------|
|        [Prev](plpgsql-porting.html)        |[Up](server-programming.html)|Part V. Server Programming|[Home](index.html)| [Next](pltcl-overview.html)|

---

## Chapter 44. PL/Tcl — Tcl Procedural Language

**Table of Contents**

[44.1. Overview](pltcl-overview.html)[44.2. PL/Tcl Functions and Arguments](pltcl-functions.html)[44.3. Data Values in PL/Tcl](pltcl-data.html)[44.4. Global Data in PL/Tcl](pltcl-global.html)[44.5. Database Access from PL/Tcl](pltcl-dbaccess.html)[44.6. Trigger Functions in PL/Tcl](pltcl-trigger.html)[44.7. Event Trigger Functions in PL/Tcl](pltcl-event-trigger.html)[44.8. Error Handling in PL/Tcl](pltcl-error-handling.html)[44.9. Explicit Subtransactions in PL/Tcl](pltcl-subtransactions.html)[44.10. Transaction Management](pltcl-transactions.html)[44.11. PL/Tcl Configuration](pltcl-config.html)[44.12. Tcl Procedure Names](pltcl-procnames.html)

[]()[]()

 PL/Tcl is a loadable procedural language for the PostgreSQL database system that enables the [ Tcl language](https://www.tcl.tk/) to be used to write PostgreSQL functions and procedures.

---

|  [Prev](plpgsql-porting.html)   |[Up](server-programming.html)| [Next](pltcl-overview.html)|
|:--------------------------------|:---------------------------:|---------------------------:|
|43.13. Porting from Oracle PL/SQL|     [Home](index.html)      |       44.1. Overview       |

 // \<![CDATA[ \<-- For SVG support if ('WebSocket' in window) { (function() { function refreshCSS() { var sheets = [].slice.call(document.getElementsByTagName("link")); var head = document.getElementsByTagName("head")[0]; for (var i = 0; i \< sheets.length; ++i) { var elem = sheets[i]; head.removeChild(elem); var rel = elem.rel; if (elem.href && typeof rel != "string" || rel.length == 0 || rel.toLowerCase() == "stylesheet") { var url = elem.href.replace(/(&|\\?)\_cacheOverride=\\d+/, ''); elem.href = url + (url.indexOf('?') \>= 0 ? '&' : '?') + '\_cacheOverride=' + (new Date().valueOf()); } head.appendChild(elem); } } var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'; var address = protocol + window.location.host + window.location.pathname + '/ws'; var socket = new WebSocket(address); socket.onmessage = function(msg) { if (msg.data == 'reload') window.location.reload(); else if (msg.data == 'refreshcss') refreshCSS(); }; console.log('Live reload enabled.'); })(); } // ]]\>