Перейти к содержимому

DELETE

DELETE удаляет подходящие строки одной таблицы.

DELETE FROM table_name
[WHERE condition]
[RETURNING expression [, ...]]

WHERE выбирает удаляемые строки. Без него целевыми становятся все строки. Действия и ограничения внешних ключей применяются внутри того же оператора.

table_name задаёт целевую таблицу. condition вычисляется для каждой строки- кандидата. RETURNING читает значения строк, выбранных для удаления.

Без RETURNING результатом является число затронутых строк. RETURNING формирует удалённые строки без гарантии порядка.

Удаление и поддерживаемые ссылочные действия атомарны. ROLLBACK восстанавливает приватные удаления транзакции; другие сессии видят их только после COMMIT.

Запрещающие внешние ключи могут отклонить удаление. Ожидания писателей, взаимоблокировки и тайм-ауты подчиняются контракту повторения транзакции. Навигационные пути в DML-условиях и RETURNING версии 1.2 отклоняются.

Обычной сессии нужны CONNECT, USAGE схемы и DELETE уровня таблицы. Для столбцов, прочитанных в WHERE или RETURNING, дополнительно требуется SELECT.

CREATE TABLE ref_delete (id INTEGER PRIMARY KEY, state TEXT NOT NULL);
INSERT INTO ref_delete VALUES (1, 'done'), (2, 'open');
DELETE FROM ref_delete WHERE state = 'done' RETURNING id, state;

См. Изменение данных, DROP TABLE и Транзакции.