CREATE EXTENSION — instala uma extensão
CREATE EXTENSION [ IF NOT EXISTS ]nome_da_extensão[ WITH ] [ SCHEMAnome_do_esquema] [ VERSIONversão] [ CASCADE ]
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.
IF NOT EXISTSNã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
,
encontrado através do caminho de controle de extensão do servidor
(definido por extension_control_path.)
nome_da_extensão.control
nome_do_esquemaO 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ãoA 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.
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.
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.
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;
O comando CREATE EXTENSION é uma extensão do
PostgreSQL.
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.