CREATE EXTENSION

CREATE EXTENSION — instala uma extensão

Sinopse

CREATE EXTENSION [ IF NOT EXISTS ] nome_da_extensão
    [ WITH ] [ SCHEMA nome_do_esquema ]
             [ VERSION versão ]
             [ CASCADE ]

Descrição

O comando CREATE EXTENSION carrega uma nova extensão no banco de dados corrente. Não deverá existir uma extensão com o mesmo nome já carregada.

Carregar uma extensão equivale essencialmente a executar o arquivo de script da extensão. O script normalmente irá criar novos objetos SQL como funções, tipos de dados, operadores e métodos de suporte de índice. O comando CREATE EXTENSION adicionalmente registra as identidades de todos os objetos criados, para que possam ser removidos se for executado o comando DROP EXTENSION.

O usuário que executa o comando CREATE EXTENSION se torna o dono da extensão para fins de verificações de privilégio posteriores e, normalmente, também se torna o dono de quaisquer objetos criados pelo script da extensão.

Carregar uma extensão normalmente requer os mesmos privilégios que seriam necessários para criar seus objetos componentes. Para muitas extensões, isto significa que são necessários privilégios de superusuário. Entretanto, se a extensão estiver marcada como trusted (confiável) em seu arquivo de controle, ela poderá ser instalada por qualquer usuário que tenha o privilégio CREATE no banco de dados corrente. Neste caso, o próprio objeto de extensão pertencerá ao usuário que efetuou a chamada, mas os objetos contidos pertencerão ao superusuário inicializador (a menos que o script da extensão os atribua explicitamente ao usuário que efetuou a chamada). Esta configuração dá ao usuário que efetuou a chamada o direito de remover a extensão, mas não de modificar objetos individuais dentro dela.

Parâmetros

IF NOT EXISTS

Não relata um erro se já existir uma extensão com o mesmo nome. É emitido um aviso neste caso. Note que não há garantia de que a extensão existente tenha semelhança com aquela que teria sido criada a partir do arquivo de script atualmente disponível.

nome_da_extensão

O nome da extensão a ser instalada. O PostgreSQL irá cria a extensão usando detalhes do arquivo nome_da_extensão.control, encontrado através do caminho de controle de extensão do servidor (definido por extension_control_path.)

nome_do_esquema

O nome do esquema no qual instalar os objetos da extensão, dado que a extensão permita que seu conteúdo seja realocado. O esquema especificado já deverá existir. Se não for especificado, e o arquivo de controle da extensão também não especificar um esquema, será usado o esquema corrente de criação de objeto padrão.

Se a extensão especificar o parâmetro schema em seu arquivo de controle, este esquema não poderá ser mudado pela cláusula SCHEMA. Normalmente, será relatado um erro se for fornecida a cláusula SCHEMA, e entrar em conflito com o parâmetro schema da extensão. Entretanto, se também for fornecida a cláusula CASCADE, então o nome_do_esquema será ignorado quando entrar em conflito. O nome_do_esquema fornecido será usado para instalação de quaisquer extensões necessárias que não especifiquem o parâmetro schema em seus arquivos de controle.

Lembre-se de que a extensão em si não é considerada associada a nenhum esquema: as extensões têm nomes não qualificados que devem ser únicos em todo o banco de dados. Mas os objetos pertencentes à extensão podem estar contidos em esquemas.

versão

A versão da extensão a ser instalada. Pode ser escrito como um identificador ou um literal cadeia de caracteres. A versão padrão é aquela especificada no arquivo de controle da extensão.

CASCADE

Instala automaticamente todas as extensões das quais esta extensão depende, e que ainda não estejam instaladas. Suas dependências também são instaladas automaticamente, recursivamente. A cláusula SCHEMA, se fornecida, aplica-se a todas as extensões instaladas dessa maneira. As outras opções do comando não são aplicadas às extensões instaladas automaticamente; em particular, suas versões padrão são sempre selecionadas.

Notas

Antes de usar o comando CREATE EXTENSION para carregar uma extensão em um banco de dados, devem ser instalados os arquivos de suporte da extensão. Podem ser encontradas informações sobre a instalação das extensões fornecidas com o PostgreSQL em Módulos e extensões adicionais fornecidos.

As extensões disponíveis no momento para carregamento podem ser identificadas nas visões do sistema pg_available_extensions ou pg_available_extension_versions.

Cuidado

A instalação de uma extensão como superusuário requer a confiança de que o autor da extensão escreveu o script de instalação da extensão de maneira segura. Não é muito difícil para um usuário mal-intencionado criar objetos Cavalo de Troia que irão comprometer a execução posterior de um script de extensão escrito de forma descuidada, permitindo que o usuário adquira privilégios de superusuário. Entretanto, os objetos Cavalo de Troia só serão perigosos se estiverem no search_path durante a execução do script, o que significa que eles estão no esquema de destino da instalação da extensão, ou no esquema de alguma extensão da qual ela depende. Portanto, uma boa regra ao lidar com extensões cujos scripts não foram cuidadosamente examinados é instalá-los apenas em esquemas para os quais o privilégio CREATE não foi e não será concedido a nenhum usuário não confiável. Da mesma forma para quaisquer extensões das quais elas dependam.

Acredita-se que as extensões fornecidas com o PostgreSQL sejam seguras contra ataques desse tipo no momento da instalação, exceto algumas que dependem de outras extensões. Conforme declarado na documentação dessas extensões, elas devem ser instaladas em esquemas seguros, ou nos mesmos esquemas das extensões das quais dependem, ou as duas coisas.

Para obter informações sobre como escrever novas extensões, veja Acondicionamento de objetos relacionados em uma extensão.

Exemplos

Instalar a extensão hstore no banco de dados corrente, colocando seus objetos no esquema addons:

CREATE EXTENSION hstore SCHEMA addons;

Outra maneira de fazer a mesma coisa:

SET search_path = addons;
CREATE EXTENSION hstore;

Conformidade

O comando CREATE EXTENSION é uma extensão do PostgreSQL.

Consulta

As informações sobre as extensões disponíveis para instalação podem ser consultadas através da visão do sistema pg_available_extensions.

Veja também

ALTER EXTENSION, DROP EXTENSION