この節では、PostgreSQLのSQL問い合わせ言語を、以下のようなもの追加することで、どのように拡張できるかを説明します。
関数
データ型
演算子
集約
PostgreSQLは、自分自身の操作がカタログに定義された方法で駆動されているため拡張が可能です。 もし標準のリレーショナルデータベースシステムに慣れ親しんでいるのであれば、システムカタログと呼ばれるものの中に、データベース、テーブル、カラムなどの情報が格納されていることは知っていると思います (システムによってはデータディクショナリと呼ぶものもあります)。このカタログは、ユーザーの目には他のテーブルと同じように見えますが、DBMSは内部情報をそこに格納しているのです。PostgreSQLと標準のリレーショナルシステムの重要な違いは、PostgreSQLはカタログにより多くの情報を格納するということです。 テーブルとカラムに関する情報だけではなく、型、関数、アクセスメソッドなどの情報も格納されています。これらのテーブルはユーザーが変更できます。 そして、PostgreSQLは内部演算をこれらのテーブルに基づいて行うので、PostgreSQLはユーザーによって拡張することができるのです。それに対して一般のデータベースシステムでは、DBMS内のハードコーディングされたプロシージャを変えるか、DBMSベンダーによって特別に書かれたモジュールをロードしなければ拡張することができません。
PostgreSQLが他のデータマネージャと違うのは、サーバーが動的ローディングによってユーザーの書いたコードを取り入れられることです。つまり、ユーザーが新しい型か関数を実装するオブジェクトコードファイル(たとえば共有ライブラリ)を指定することができ、PostgreSQLは要求されたとおりにロードするのです。SQLで書かれたコードをサーバーに追加するのはさらに簡単です。このように演算を"簡単に"変えることができるためPostgreSQLは新しいアプリケーションや格納構造体のラピットプロトタイピングに適しています。