Summary: in this tutorial, you’ll learn how to drop a database using the PostgreSQL DROP DATABASE
statement.
PostgreSQL DROP DATABASE statement overview #
The DROP DATABASE
statement permanently deletes a database, including all its objects such as tables, views, indexes, and data. This action is irreversible.
Here’s the basic syntax of the DROP DATABASE
statement:
DROP DATABASE database_name;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
In this syntax, the statement removes the database named database_name
.
When you connect to a database, it becomes the current database.
PostgreSQL does not allow you to drop the current database. To drop a database, you must connect to a different database. Additionally, only the database owner or superuser can drop a database.
However, if the database has action connections the DROP DATABASE
will fail.
If you want to drop has active connections, you can terminate them before deleting the database using the with FORCE
option:
DROP DATABASE database_name
WITH (FORCE);
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Dropping a database #
First, open the terminal and connect to your PostgreSQL database server using psql tool:
psql -U postgres
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Second, create a new database named crm
:
CREATE DATABASE crm;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Third, switch to the crm
database:
\c crm
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Fourth, drop the crm
database:
DROP DATABASE crm;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
PostgreSQL issued the following error:
ERROR: cannot drop the currently open database
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
To drop the crm
database, we need to switch to a different database.
Fifth, switch to the postgres
database:
\c postgres
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Finally, drop the crm
database:
DROP DATABASE crm;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Dropping a database with the FORCE option #
We’ll create a new database, connect to it, and drop the database from a separate session.
Session 1 #
First, connect to your PostgreSQL server using psql
tool:
psql -U postgres
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Second, create a new database named finance
:
CREATE DATABASE finance;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Third, switch to the finance
database:
\c finance
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Session 2 #
First, connect to your PostgreSQL in a different session:
psql -U postgres
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Second, attempt to drop the finance database:
DROP DATABASE finance;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
PostgreSQL issued the following error:
ERROR: database "finance" is being accessed by other users
DETAIL: There is 1 other session using the database.
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Third, check the active connections using the following query:
SELECT
pid,
usename,
application_name,
client_addr
FROM
pg_stat_activity
WHERE
datname = 'finance';
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
pid | usename | application_name | client_addr
-------+----------+------------------+-------------
30400 | postgres | psql | 127.0.0.1
Code language: plaintext (plaintext)
Finally, drop the finance
database with the FORCE
option:
DROP DATABASE finance WITH (FORCE);
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
DROP DATABASE
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
The output indicates that the statement successfully closes the active connection and deletes the database.
Session 1 #
If you attempt to run any query on session 1 connected to the finance database that has been deleted, you’ll encounter an error. For example:
SELECT 1;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Error:
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
The connection to the server was lost. Attempting reset: Failed.
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Summary #
- Use the
DROP DATABASE
statement to delete a database from the PostgreSQL server. - Use the
DROP DATABASE
with theFORCE
option to close active connections and drop the database. - Only the superuser and database owner can drop the database.