Инструкции DROP советы и хитрости PostgreSQL
Платформа PostgreSQL не поддерживает дополнительные ключевые слова RESTRICT и CASCADE, поддерживаемые стандартом ANSI. Эта платформа поддерживает широкое разнообразие вариантов инструкции DROP, описываемых следующим синтаксисом.
DROP {AGGEGATE | DATABASE | FUNCTION | GROUP | INDEX | LANGUAGE | OPERATOR |RULE | SEQUENCE | TABLE | TRIGGER | TYPE | USER | VIEW} имя_объекта
Ниже приводится полный синтаксис для каждого из вариантов.
AGGREGATE имя_агрегата ({тип_данных *})
Удаляется пользовательская агрегатная функция. Параметр тип_данных — это тип данных существующей агрегатной функции, но вы можете заменить этот параметр звездочкой (*), которая соответствует любому типу данных. Например, мы можем удалить агрегатную функцию sales_avg, которую мы создали с помощью инструкции PostgreSQL CREATE AGGREGATE:
DROP AGGREGATE sales_avg(int4);
DATABASE имя_базы_данных
Удаляется указанная база данных и очищается директория операционной системы, содержащая все данные базы. Эту команду может выполнить только владелец базы данных при соединении с базой данных, отличной от удаляемой. Например, мы можем удалить базу данных sales_archive.
DROP DATABASE sales_archive;
FUNCTION имя_функции ([тип_дапных1 [, …] J)
Удаляется указанная пользовательская функция. Поскольку PostgreSQL разрешает использовать несколько функций с одинаковым именем, различаемых только по принимаемым параметрам, вы должны указать один или несколько параметров, которые однозначно идентифицируют функцию, которую вы собираетесь удалить. Система PostgreSQL не выполняет никаких проверок зависимостей в других объектах, которые могут ссылаться на удаляемую пользовательскую функцию. (Они не будут работать при вызове несуществующего объекта.) Пример:
DROP FUNCTION median_distribution (int, int, int, int);
GROUP имя группы
Удаляется указанная группа, но это удаление не затрагивает пользователей, входящих в эту группу. Эта инструкция сходна с инструкцией DROP ROLE других платформ.
INDEX имя _индекса [, …]
Удаляется один или несколько индексов, владельцем которых вы являетесь. Пример:
DROP INDEX ndx_titles, ndx_authors;
[PROCEDURAL] LANGUAGE название_языка
Удаляется указанный пользовательский язык. При желании вы можете заключить имя в одинарные кавычки. Обратите внимание, что PostgreSQL не производит проверку на наличие в базе данных пользовательских функций или триггеров, написанных на указанном языке. Пример:
DROP LANGUAGE PHP;
OPERATOR id_onepamopa ({типДанных слева NONE], {тип Данных справа NONE])
Удаляется указанный пользовательский оператор. Значение параметра типДан-иых_слева — это левый аргумент оператора, а тип Данных справа — это правый аргумент оператора. Предложение NONE можно заменить любым аргументом, если в данном положении аргумент отсутствует. (PostgreSQL не проводит проверку на наличие зависимых методов доступа и классов операторов, которые ссылаются на удаленные операторы). Вы должны выявить и удалить их вручную, чтобы избежать ошибок при их вызове. Например, первая из следующих инструкций удаляет оператор возведения в степень, а вторая удаляет унарный оператор изменения знака.
DROP OPERATOR (int4, int4); DROP OPERATOR (NONE, bool);
RULE имя_правила […]
Из базы данных удаляется одно или несколько правил. После этого система PostgreSQL немедленно прекращает выполнение этих правил и очищает исторические сведения об их использовании. Пример:
DROP RULE phone_rule;
SEQUENCE имя_последовательности [, …]
Из базы данных удаляется одна или несколько указанных последовательностей. Поскольку текущая версия PostgreSQL рассматривает последовательности как таблицы особого типа, работа инструкции DROP SEQUENCE во многом напоминает инструкцию DROP TABLE.
TABLE имя_таблицы […]
Из базы данных удаляется одна или несколько таблиц, а также все связанные с ними индексы и триггеры. Например, в одной инструкции можно удалить сразу несколько таблиц.
DROP TABLE authors, titles;
TRIGGER имя_триггера ON имя_таблицы
Из базы данных удаляется указанный триггер. Поскольку PostgreSQL требует, чтобы имя триггера было уникальным только в пределах таблицы, с которой он связан, в разных таблицах может быть много триггеров с такими именами, как insert_trigger или deletetrigger. Пример:
DROP TRIGGER insert_trigger ON authors;
TYPE имя_типа [, …]
Из базы данных удаляется один или несколько существующих пользовательских типов. Система PostgreSQL не проверяет, какое влияние команда DROP TYPE может оказать на зависимые объекты, такие, как функции, агрегаты и таблицы. Вы должны проверять зависимые объекты вручную. (Не удаляйте никакие встроенные типы, которые поставляются с PostgreSQL!) Обратите внимание, что реализация типов в PostgreSQL отличается от стандарта ANSI. За дополнительной информацией обращайтесь к разделу «Инструкция CREATE/ALTER ТУРЕ».
USER имя_пользователя
Из текущей базы данных удаляется указанный пользователь. Эта команда не удаляет никакие объекты, принадлежащие пользователю, такие, как таблицы или представления, и команда не будет выполнена, если пользователю принадлежит какая-нибудь база данных. Пример:
DROP USER emily;
VIEW имя представления [, …]
Из базы данных удаляется одно или несколько существующих представлений.
Обратите внимание, что операции удаления в PostgreSQL не позволяют указывать базу данных, в которой производится операция (за исключением инструкции DROP DATABASE). Поэтому вы должны выполнять любую операцию удаления из той базы, в которой расположен объект, который вы хотите удалить.