Compile & Install pg_tle on Postgres
PostgreSQL is a powerful database, but sometimes you want to extend its functionality with custom features, and that's where extensions like pg_tle
(Trusted Language Extensions) come into play.
If you're new to pg_tle
, here's a quick round-up of why it makes sense for you - See Unlock PostgreSQL Superpowers with pg_tle.
Given the power of pg_tle
, you may want to install it locally (on your laptop or an EC2 instance) before deploying to environments with restricted access (such as Production, or PostgreSQL services offered by major cloud providers). This is not only helpful to thoroughly test your code, but also to save on cost given that all development can then happen on-premise.
In this blog post, we'll go through the process of compiling and installing pg_tle
for postgres on your Ubuntu system.
Prerequisites
An operating system running Ubuntu (this guide assumes Ubuntu 20.04 or similar).
- A PostgreSQL database server, installed and running.
- Basic familiarity with the command line and
postgresql.conf
. - Some development tools (we'll install these as we go).
Steps
Start by updating your Ubuntu package list & install the necessary tools and libraries (This is required, since we would be compiling the pg_tle
extension by source).
$ sudo apt update
$ sudo apt install build-essential make git postgresql-server-dev-all
The postgresql-server-dev-all
package version may need to be adjusted to match your specific PostgreSQL version. If this doesn't work for you, you can instead read more about setting up your Ubuntu operating system (albeit in a dated post) here - See Setup Linux for PostgreSQL development [3].
Download pg_tle
Source Code:
Get the pg_tle
source code from the GitHub project repository:
$ git clone https://github.com/aws/pg_tle.git
Compile pg_tle
:
Compile the source code to create the extension files:
$ cd pg_tle
$ make
Although rare, make
may fail if it can't find pg_config
. As in the example below, a quick hack could be to help by pointing make
to the pg_config
binary location:
$ make <<===== Fails
Makefile:24: /usr/lib/postgresql/15/lib/pgxs/src/makefiles/pgxs.mk: No such file or directory
make: *** No rule to make target '/usr/lib/postgresql/15/lib/pgxs/src/makefiles/pgxs.mk'. Stop.
$ PG_CONFIG="`type -P -a pg_config`" make <<===== Works successfully
gcc -Wall -Wmissing-prototypes ...
.
.
. (compiling starts successfully)
Install pg_tle
:
Install the compiled extension into your PostgreSQL database. This command would install the extension related files to the postgres binaries folder, pointed to by PG_CONFIG
:
$ sudo make install
Enable pg_tle
in Your Database:
Connect to your PostgreSQL database using your preferred tool (e.g., psql
) and run the following SQL command:
test_pgtle=# CREATE EXTENSION pg_tle;
CREATE EXTENSION
Verification:
To confirm pg_tle
is installed correctly, run this SQL query:
test_pgtle=# SELECT * FROM pg_available_extensions WHERE name = 'pg_tle';
-[ RECORD 1 ]-----+-------------------------------------------
name | pg_tle
default_version | 1.4.0
installed_version | 1.4.0
comment | Trusted Language Extensions for PostgreSQL
You should see a result similar to the above, where installed_version
confirms the pg_tle
version that's installed successfully.
Conclusion
You've now successfully compiled and installed the pg_tle
extension on your Ubuntu system! This opens up the possibility to create and deploy custom extensions to enhance your PostgreSQL database.
pg_tle
is a powerful tool that allows you to develop more advanced extensions. You can find more information and examples in the official pg_tle
documentation at https://github.com/aws/pg_tle.
If you're intrigued, keep an eye out for a follow-up post where I'll show a simple example of how to use pg_tle
extension for a real-world need!
References
- Unlock PostgreSQL Superpowers with
pg_tle
- https://www.thatguyfromdelhi.com/2024/04/unlock-postgresql-superpowers-with-pgtle.html - Setup Linux for PostgreSQL development - https://www.thatguyfromdelhi.com/2011/12/setup-ubuntu-for-postgresql-development.html