> For the complete documentation index, see [llms.txt](https://docs.postgresql.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.postgresql.tw/server-programming/xplang.md).

# Chapter 40. Procedural Languages

**Table of Contents**

[40.1. Installing Procedural Languages](/server-programming/xplang/xplang-install.md)

PostgreSQL allows user-defined functions to be written in other languages besides SQL and C. These other languages are generically called *procedural languages* (PLs). For a function written in a procedural language, the database server has no built-in knowledge about how to interpret the function's source text. Instead, the task is passed to a special handler that knows the details of the language. The handler could either do all the work of parsing, syntax analysis, execution, etc. itself, or it could serve as “glue” between PostgreSQL and an existing implementation of a programming language. The handler itself is a C language function compiled into a shared object and loaded on demand, just like any other C function.

There are currently four procedural languages available in the standard PostgreSQL distribution: PL/pgSQL ([Chapter 41](/server-programming/plpgsql.md)), PL/Tcl ([Chapter 42](/server-programming/pltcl.md)), PL/Perl ([Chapter 43](/server-programming/plperl.md)), and PL/Python ([Chapter 44](/server-programming/plpython.md)). There are additional procedural languages available that are not included in the core distribution. [Appendix H](/appendixes/external-projects.md) has information about finding them. In addition other languages can be defined by users; the basics of developing a new procedural language are covered in [Chapter 57](/internals/plhandler.md).

***

原文：[PostgreSQL 18.6 Documentation](https://www.postgresql.org/docs/18/xplang.html)（英文原文，待翻譯）


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.postgresql.tw/server-programming/xplang.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
