Skip to main content
Documents
Basic SyntaxMath FunctionsDate FunctionsJSON FunctionsDatabasesTables & Schema ManagementString FunctionsTriggersIndexes

PostgreSQL DELETE

The `DELETE` statement in PostgreSQL is used to remove rows from a table. It allows for the deletion of specific records based on a condition, or all records if no condition is specified.

Usage

The `DELETE` statement is employed when you need to remove data from a table. It is commonly used to clear obsolete or incorrect data.

DELETE FROM table_name
[WHERE condition];

In this syntax, `DELETE FROM table_name` specifies the table from which you want to delete rows, while the optional `WHERE condition` determines which rows to remove.

Examples

1. Delete All Rows

DELETE FROM users;

This example deletes all records from the `users` table, effectively emptying it.

2. Delete with a Condition

DELETE FROM orders
WHERE order_date < '2023-01-01';

Here, the command removes all rows from the `orders` table where the `order_date` is before January 1, 2023.

3. Delete Using a Subquery

DELETE FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE name = 'HR');

This example deletes employees who belong to the HR department by utilizing a subquery to identify relevant `department_id`s.

Tips and Best Practices

  • Use with caution. Always ensure that the `WHERE` clause is accurate to avoid unintentional data loss.
  • Backup data. Consider backing up your table or database before performing large-scale deletions.
  • Verify with SELECT. Run a `SELECT` statement with the same `WHERE` condition to check which rows will be deleted.
  • Use `RETURNING`. If needed, use the `RETURNING` clause to output the rows that have been deleted, which can be useful for verification or auditing purposes.
  • Limit deletions. In high-volume tables, consider deleting in batches to minimize table locks and performance impacts.
  • Consider CASCADE. When deleting rows from a table that has foreign key constraints, you can use the `CASCADE` option to automatically delete any dependent rows in related tables.
  • Concurrency Handling. Be aware that concurrent `DELETE` operations can lead to race conditions. Use transactions or appropriate locking mechanisms to manage concurrent deletions.
  • Performance Considerations. Optimize `DELETE` operations by ensuring that indexes are in place for conditions in the `WHERE` clause, especially in large tables, to enhance performance.