删除 PostgreSQL 中的所有表

David Mbochi Njonge 2023年1月30日
  1. 删除 PostgreSQL 数据库中的所有表
  2. 在 PostgreSQL 中删除单个模式中的所有表
  3. 在 PostgreSQL 中通过指定多个表来删除所有表
  4. 在 PostgreSQL 中使用带有 pg_tables 的 SQL 查询删除所有表
  5. 在 PostgreSQL 中使用 table_catalogtable_schema 删除所有表
删除 PostgreSQL 中的所有表

在开发应用程序时,开发人员必须了解他们可以用来与数据库交互的不同方式。这些知识将有助于提高开发效率,因为他们知道解决特定问题的最佳方法。

删除 PostgreSQL 数据库中的所有表

在本教程中,我们将学习可以用来删除特定数据库中的表而不删除数据库本身的不同方法。

我们将首先在 PostgreSQL 数据库管理系统中创建一个数据库,添加几个表,并删除我们使用不同方法创建的表。

使用以下命令登录 PostgreSQL。

>psql -U postgres

创建一个数据库,我们将使用以下查询来保存我们的数据库表。

postgres=# create database customer_db;
CREATE DATABASE

查看我们使用 \l 命令创建的数据库,该命令将返回所有数据库的集合。

postgres=# \l

输出:

                                          List of databases
    Name     |  Owner   | Encoding |      Collate       |       Ctype        |   Access privileges
-------------+----------+----------+--------------------+--------------------+-----------------------
 customer_db | postgres | UTF8     | English_Kenya.1252 | English_Kenya.1252 |
 postgres    | postgres | UTF8     | English_Kenya.1252 | English_Kenya.1252 |
 template0   | postgres | UTF8     | English_Kenya.1252 | English_Kenya.1252 | =c/postgres          +
             |          |          |                    |                    | postgres=CTc/postgres
 template1   | postgres | UTF8     | English_Kenya.1252 | English_Kenya.1252 | =c/postgres          +
             |          |          |                    |                    | postgres=CTc/postgres
(4 rows)

注意我们创建的名为 customer_db 的数据库显示在上表的第一行,我们可以使用 \c 命令连接到它。

postgres=# \c customer_db;

输出:

You are now connected to database "customer_db" as user "postgres".

我们需要在我们的数据库中有一些数据库表才能删除它们;我们可以使用以下查询在数据库 customer_db 中创建三个表。

customer_db=# CREATE TABLE customer(id SERIAL NOT NULL UNIQUE,firstName varchar(50),lastName varchar(50),email varchar(50),PRIMARY KEY(id));
customer_db=# CREATE TABLE product(id SERIAL NOT NULL UNIQUE,productName varchar(50),productDescription varchar(50),productPrice integer,PRIMARY KEY(id));
customer_db=# CREATE TABLE cart(id SERIAL NOT NULL UNIQUE,product varchar(50),productPrice integer,productQuantity integer,totalCost integer, PRIMARY KEY(id));

上面的查询创建了三个表,我们可以使用 \dt 来验证这些表是否已经创建。

customer_db=# \dt

输出:

          List of relations
 Schema |   Name   | Type  |  Owner
--------+----------+-------+----------
 public | cart     | table | postgres
 public | customer | table | postgres
 public | product  | table | postgres
(3 rows)

在 PostgreSQL 中删除单个模式中的所有表

请注意,我们上面执行的 \dt 命令返回数据库中的表列表,并且该表的模式被列为 public

我们将删除此模式中的所有表,重新创建模式,并恢复模式的默认权限,如下所示。

customer_db=# drop SCHEMA public CASCADE;

输出:

NOTICE:  drop cascades to 3 other objects
DETAIL:  drop cascades to table customer
drop cascades to table product
drop cascades to table cart
DROP SCHEMA

删除模式会将删除操作级联到我们数据库中的三个表。使用以下命令再次创建模式并将所有角色授予 postgrespublic 模式,如下所示。

customer_db=# CREATE SCHEMA public;
customer_db=# GRANT ALL ON SCHEMA public TO postgres;
customer_db=# GRANT ALL ON SCHEMA public TO public;

在 PostgreSQL 中通过指定多个表来删除所有表

如下所示,我们可以使用 SQL drop 语句通过使用逗号分隔列表列出我们要删除的所有表来删除表。

在这个查询之后,\dt 表没有找到任何关系证明我们在数据库中的所有表都已成功删除。

customer_db=# drop table if exists customer, product, cart;

在 PostgreSQL 中使用带有 pg_tables 的 SQL 查询删除所有表

由于在上面的示例中删除了我们的表,因此使用提供的查询再次重新创建三个表以删除下面的所有表。

我们可以编写一个 SQL 查询来选择我们要删除的所有表,并对这些表执行级联操作。

customer_db=# SELECT 'DROP TABLE IF EXISTS "' || tablename || '" CASCADE;'
from pg_tables WHERE schemaname = 'public';

输出:

                 ?column?
------------------------------------------
 DROP TABLE IF EXISTS "customer" CASCADE;
 DROP TABLE IF EXISTS "product" CASCADE;
 DROP TABLE IF EXISTS "cart" CASCADE;
(3 rows)

在 PostgreSQL 中使用 table_catalogtable_schema 删除所有表

我们可以像在上面的示例中那样编写 SQL 查询,并提供作为我们的数据库的目录和用于删除表的公共模式。

customer_db=# select 'DROP TABLE "' || table_schema || '"."' || table_name || '" CASCADE;' from information_schema.tables where table_catalog = 'customer_db' and table_schema = 'public';

输出:

               ?column?
-----------------------------------------
 DROP TABLE "public"."customer" CASCADE;
 DROP TABLE "public"."product" CASCADE;
 DROP TABLE "public"."cart" CASCADE;
(3 rows)
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

相关文章 - PostgreSQL Table