mirror of
https://github.com/postgres/postgres.git
synced 2025-12-22 17:42:17 +03:00
Remove the unconditional superuser permissions check in CREATE EXTENSION, and instead define a "superuser" extension property, which when false (not the default) skips the superuser permissions check. In this case the calling user only needs enough permissions to execute the commands in the extension's installation script. The superuser property is also enforced in the same way for ALTER EXTENSION UPDATE cases. In other ALTER EXTENSION cases and DROP EXTENSION, test ownership of the extension rather than superuserness. ALTER EXTENSION ADD/DROP needs to insist on ownership of the target object as well; to do that without duplicating code, refactor comment.c's big switch for permissions checks into a separate function in objectaddress.c. I also removed the superuserness checks in pg_available_extensions and related functions; there's no strong reason why everybody shouldn't be able to see that info. Also invent an IF NOT EXISTS variant of CREATE EXTENSION, and use that in pg_dump, so that dumps won't fail for installed-by-default extensions. We don't have any of those yet, but we will soon. This is all per discussion of wrapping the standard procedural languages into extensions. I'll make those changes in a separate commit; this is just putting the core infrastructure in place.
122 lines
2.8 KiB
Plaintext
122 lines
2.8 KiB
Plaintext
<!--
|
|
doc/src/sgml/ref/drop_extension.sgml
|
|
PostgreSQL documentation
|
|
-->
|
|
|
|
<refentry id="SQL-DROPEXTENSION">
|
|
<refmeta>
|
|
<refentrytitle>DROP EXTENSION</refentrytitle>
|
|
<manvolnum>7</manvolnum>
|
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>DROP EXTENSION</refname>
|
|
<refpurpose>remove an extension</refpurpose>
|
|
</refnamediv>
|
|
|
|
<indexterm zone="sql-dropextension">
|
|
<primary>DROP EXTENSION</primary>
|
|
</indexterm>
|
|
|
|
<refsynopsisdiv>
|
|
<synopsis>
|
|
DROP EXTENSION [ IF EXISTS ] <replaceable class="PARAMETER">extension_name</replaceable> [, ...] [ CASCADE | RESTRICT ]
|
|
</synopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1>
|
|
<title>Description</title>
|
|
|
|
<para>
|
|
<command>DROP EXTENSION</command> removes extensions from the database.
|
|
Dropping an extension causes its component objects to be dropped as well.
|
|
</para>
|
|
|
|
<para>
|
|
You must own the extension to use <command>DROP EXTENSION</command>.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Parameters</title>
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
<term><literal>IF EXISTS</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Do not throw an error if the extension does not exist. A notice is issued
|
|
in this case.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><replaceable class="PARAMETER">extension_name</replaceable></term>
|
|
<listitem>
|
|
<para>
|
|
The name of an installed extension.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>CASCADE</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Automatically drop objects that depend on the extension.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><literal>RESTRICT</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Refuse to drop the extension if any objects depend on it (other than
|
|
its own member objects and other extensions listed in the same
|
|
<command>DROP</> command). This is the default.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Examples</title>
|
|
|
|
<para>
|
|
To remove the extension <literal>hstore</literal> from the current
|
|
database:
|
|
<programlisting>
|
|
DROP EXTENSION hstore;
|
|
</programlisting>
|
|
This command will fail if any of <literal>hstore</literal>'s objects
|
|
are in use in the database, for example if any tables have columns
|
|
of the <type>hstore</> type. Add the <literal>CASCADE</> option to
|
|
forcibly remove those dependent objects as well.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Compatibility</title>
|
|
|
|
<para>
|
|
<command>DROP EXTENSION</command> is a <productname>PostgreSQL</>
|
|
extension.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>See Also</title>
|
|
|
|
<simplelist type="inline">
|
|
<member><xref linkend="sql-createextension"></member>
|
|
<member><xref linkend="sql-alterextension"></member>
|
|
</simplelist>
|
|
</refsect1>
|
|
|
|
</refentry>
|