刪除 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