CREATE EXTENSION

CREATE EXTENSION — instalar una extensión

Synopsis

CREATE EXTENSION [ IF NOT EXISTS ] nombre_extensión
    [ WITH ] [ SCHEMA nombre_esquema ]
             [ VERSION versión ]
             [ CASCADE ]

Descripción

CREATE EXTENSION carga una nueva extensión en la base de datos actual. No debe haber una extensión con el mismo nombre ya cargada.

Cargar una extensión equivale esencialmente a ejecutar el archivo de script de la extensión. El script normalmente creará nuevos objetos SQL como funciones, tipos de datos, operadores y métodos de soporte de índices. CREATE EXTENSION registra además las identidades de todos los objetos creados, para que puedan ser eliminados nuevamente si se ejecuta DROP EXTENSION.

El usuario que ejecuta CREATE EXTENSION se convierte en el propietario de la extensión a efectos de comprobaciones de privilegios posteriores, y normalmente también se convierte en el propietario de los objetos creados por el script de la extensión.

Cargar una extensión normalmente requiere los mismos privilegios que se requerirían para crear sus objetos componentes. Para muchas extensiones, esto significa que se necesitan privilegios de superusuario. Sin embargo, si la extensión está marcada como trusted (de confianza) en su archivo de control, entonces cualquier usuario que tenga el privilegio CREATE en la base de datos actual puede instalarla. En este caso, el objeto de la extensión en sí será propiedad del usuario que la llama, pero los objetos contenidos serán propiedad del superusuario de arranque (a menos que el script de la extensión los asigne explícitamente al usuario que la llama). Esta configuración le da al usuario que la llama el derecho de eliminar la extensión, pero no de modificar los objetos individuales dentro de ella.

Parámetros

IF NOT EXISTS

No lances un error si ya existe una extensión con el mismo nombre. En este caso se emitirá una advertencia. Ten en cuenta que no hay garantía de que la extensión existente sea similar a la que se habría creado a partir del archivo de script disponible actualmente.

nombre_extensión

El nombre de la extensión que se va a instalar. PostgreSQL creará la extensión utilizando los detalles del archivo nombre_extensión.control, el cual se busca a través de la ruta de control de extensiones del servidor (establecida por extension_control_path).

nombre_esquema

El nombre del esquema en el que se instalarán los objetos de la extensión, dado que la extensión permite que su contenido sea reubicado. El esquema nombrado ya debe existir. Si no se especifica, y el archivo de control de la extensión tampoco especifica un esquema, se utiliza el esquema de creación de objetos predeterminado actual.

Si la extensión especifica un parámetro schema en su archivo de control, entonces ese esquema no se puede anular con una cláusula SCHEMA. Normalmente, se lanzará un error si se proporciona una cláusula SCHEMA y esta entra en conflicto con el parámetro schema de la extensión. Sin embargo, si también se proporciona la cláusula CASCADE, entonces nombre_esquema se ignora cuando hay conflicto. El nombre_esquema dado se utilizará para la instalación de cualquier extensión necesaria que no especifique schema en sus archivos de control.

Recuerda que la extensión en sí no se considera dentro de ningún esquema: las extensiones tienen nombres no calificados que deben ser únicos en toda la base de datos. Pero los objetos que pertenecen a la extensión sí pueden estar dentro de esquemas.

versión

La versión de la extensión a instalar. Esto se puede escribir como un identificador o como una cadena literal. La versión predeterminada es la que esté especificada en el archivo de control de la extensión.

CASCADE

Instala automáticamente cualquier extensión de la que dependa esta extensión que no esté ya instalada. Sus dependencias también se instalan automáticamente de forma recursiva. La cláusula SCHEMA, si se proporciona, se aplica a todas las extensiones que se instalen de esta manera. Otras opciones de la sentencia no se aplican a las extensiones instaladas automáticamente; en particular, siempre se seleccionan sus versiones predeterminadas.

Notas

Antes de que puedas usar CREATE EXTENSION para cargar una extensión en una base de datos, los archivos de soporte de la extensión deben estar instalados. La información sobre la instalación de las extensiones suministradas con PostgreSQL se puede encontrar en Módulos suministrados adicionales.

Las extensiones actualmente disponibles para cargar se pueden identificar a partir de las vistas del sistema pg_available_extensions o pg_available_extension_versions.

Caution

Instalar una extensión como superusuario requiere confiar en que el autor de la extensión escribió el script de instalación de la misma de manera segura. No es extremadamente difícil para un usuario malicioso crear objetos «caballo de Troya» que comprometan la ejecución posterior de un script de extensión escrito de forma descuidada, permitiendo a ese usuario adquirir privilegios de superusuario. Sin embargo, los objetos caballo de Troya solo son peligrosos si están en el search_path durante la ejecución del script, lo que significa que están en el esquema de destino de la instalación de la extensión o en el esquema de alguna extensión de la que dependa. Por lo tanto, una buena regla general al tratar con extensiones cuyos scripts no han sido revisados cuidadosamente es instalarlas solo en esquemas para los cuales no se haya otorgado ni se otorgará el privilegio CREATE a ningún usuario no confiable. Lo mismo aplica para cualquier extensión de la que dependan.

Se cree que las extensiones suministradas con PostgreSQL son seguras contra este tipo de ataques en el momento de la instalación, excepto por unas pocas que dependen de otras extensiones. Como se indica en la documentación de esas extensiones, deben instalarse en esquemas seguros, o instalarse en los mismos esquemas que las extensiones de las que dependen, o ambos.

Para obtener información sobre cómo escribir nuevas extensiones, consulta Section 36.17.

Ejemplos

Instala la extensión hstore en la base de datos actual, colocando sus objetos en el esquema addons:

CREATE EXTENSION hstore SCHEMA addons;

Otra forma de lograr lo mismo:

SET search_path = addons;
CREATE EXTENSION hstore;

Compatibilidad

CREATE EXTENSION es una extensión de PostgreSQL.

Consulte también

ALTER EXTENSION, DROP EXTENSION