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