Nas próximas seções será mostrado como se pode estender a linguagem de comandos SQL do PostgreSQL pela adição de:
funções (começando na Seção 31.3)
agregações (começando na Seção 31.10)
tipos de dado (começando na Seção 31.11)
operadores (começando na Seção 31.12)
classes de operador para índices (começando na Seção 31.14)
O PostgreSQL pode ser estendido, porque sua operação é dirigida pelo catálogo (catalog-driven). Quem está familiarizado com sistemas de banco de dados relacionais padrão com certeza sabe que estes armazenam informações sobre bancos de dados, tabelas, colunas, etc., no que é comumente conhecido por catálogos do sistema (Alguns sistemas chamam de dicionário de dados). Os catálogos são vistos pelo usuário como qualquer outra tabela, mas o SGBD armazena suas informações internas nestas tabelas. Uma diferença chave entre o PostgreSQL e os sistemas de banco de dados relacionais padrão é que o PostgreSQL armazena muito mais informação em seus catálogos: não apenas informações sobre tabelas e colunas, mas também informações sobre tipos de dado, funções, métodos de acesso, etc. Estas tabelas podem ser modificadas pelo usuário e, uma vez que as operações do PostgreSQL são baseadas nestas tabelas, isto significa que o PostgreSQL pode ser estendido pelos usuários. Em comparação, os sistemas de banco de dados convencionais só podem ser estendidos alterando os procedimentos presentes no código fonte, ou pela carga de módulos escritos pelo fornecedor do SGBD.
Além disso, o servidor PostgreSQL pode incorporar código escrito pelo usuário através de carregamento dinâmico, ou seja, o usuário especifica um arquivo contendo código objeto (por exemplo, uma biblioteca compartilhada implementando um novo tipo de dado ou função), e o PostgreSQL fará a carga deste módulo quando houver necessidade. O código escrito na linguagem SQL é ainda mais simples de ser adicionado ao servidor. Esta capacidade de modificar sua operação "em tempo de execução" (on the fly) torna o PostgreSQL especialmente indicado para a prototipação rápida de novos aplicativos e estruturas de armazenamento.