介绍
在这个实验(lab)中,你将学习使用 PostgreSQL 进行数据库管理的基础知识。这个实验涵盖了管理数据库的基本操作,包括创建新数据库、列出和连接到现有数据库,以及在不再需要时删除数据库。
你将首先使用 createdb 命令创建一个新数据库,并通过 psql 命令验证其创建。然后,你将学习如何列出所有可用的数据库并连接到特定的数据库。最后,你将探索如何删除数据库和查看数据库元数据。这个实验提供了一个 PostgreSQL 中基本数据库管理任务的实践介绍。
创建一个新数据库
在这个步骤中,你将学习如何在 PostgreSQL 中创建一个新的数据库。创建数据库是组织和存储数据的第一步。
在我们开始之前,让我们了解一下什么是数据库。数据库是数据的结构化集合,为了便于访问、管理和更新而组织。在 PostgreSQL 中,数据库是表、视图和其他数据库对象的容器。
要创建一个新的数据库,你将使用 createdb 命令。此命令是 SQL 命令 CREATE DATABASE 的包装器(wrapper)。
打开终端: 如果你还没有打开终端,请启动一个终端窗口。
创建新数据库: 使用
createdb命令,后跟你要给数据库的名称。例如,要创建一个名为mydatabase的数据库,请运行以下命令:createdb mydatabase此命令将创建一个名为
mydatabase的新数据库。如果命令成功,你将看不到任何输出。验证数据库创建: 要确认数据库已创建,你可以使用
psql命令列出所有数据库。首先,连接到postgres默认数据库:psql -d postgres你将看到
postgres=#提示符。列出数据库: 在
postgres=#提示符下,执行以下 SQL 命令以列出所有数据库:\l
此命令将显示数据库列表,包括你刚刚创建的数据库(
mydatabase)。你应该看到类似于以下的输出:List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- mydatabase| labex | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)请注意,
mydatabase在列表中。退出 psql: 要退出
psql提示符,请输入:\q然后按 Enter 键。你将返回到常规终端提示符。
你现在已成功在 PostgreSQL 中创建了一个新的数据库。
列出并连接到数据库
在这个步骤中,你将学习如何列出可用的数据库,并使用 psql 命令行工具连接到特定的数据库。
打开终端: 如果你还没有打开终端,请启动一个终端窗口。
列出可用的数据库: 要列出所有数据库,你可以使用带有
-l选项(小写字母“L”)的psql命令。此选项列出服务器上的所有数据库。由于你没有指定要连接的数据库,psql将尝试使用你当前的用户名称进行连接。psql -l此命令将显示数据库列表,以及它们的拥有者、编码和其他信息。你应该看到类似于以下的输出:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- mydatabase| labex | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)此输出显示了数据库的名称、它们的拥有者和其他详细信息。你应该看到你在上一步中创建的
mydatabase数据库。连接到特定的数据库: 要连接到特定的数据库,请使用带有
-d选项的psql命令,后跟数据库的名称。例如,要连接到mydatabase数据库,请运行以下命令:psql -d mydatabase如果连接成功,你将看到
mydatabase=#提示符。这表示你现在已连接到mydatabase数据库。验证连接: 要验证你是否已连接到正确的数据库,你可以执行一个简单的 SQL 命令,例如:
SELECT version();
此命令将显示你连接到的 PostgreSQL 服务器的版本。输出将如下所示:
version ---------------------------------------------------------------------------------------------------------------- PostgreSQL 14.7 (Debian 14.7-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit (1 row)退出 psql: 要退出
psql提示符,请输入:\q然后按 Enter 键。你将返回到常规终端提示符。
你现在已成功列出了可用的数据库,并使用 psql 连接到特定的数据库。
删除数据库
在这个步骤中,你将学习如何在 PostgreSQL 中删除(drop)一个数据库。删除数据库是一个永久性的操作,因此在使用此命令时务必小心。 数据库中的所有数据都将丢失。
打开终端: 如果你还没有打开终端,请启动一个终端窗口。
删除数据库: 使用
dropdb命令,后跟你要删除的数据库的名称。例如,要删除mydatabase数据库,请运行以下命令:dropdb mydatabase此命令将删除
mydatabase数据库。如果命令成功,你将看不到任何输出。重要提示: 在删除数据库之前,请确保没有人连接到它。如果存在活动连接,则
dropdb命令可能会失败。验证数据库删除: 要确认数据库已删除,你可以使用
psql命令列出所有数据库。首先,连接到postgres默认数据库:psql -d postgres
你将看到
postgres=#提示符。列出数据库: 在
postgres=#提示符下,执行以下 SQL 命令以列出所有数据库:\l此命令将显示数据库列表。验证
mydatabase是否不再在列表中。List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)如果未列出
mydatabase,则表示已成功删除。退出 psql: 要退出
psql提示符,请输入:\q然后按 Enter 键。你将返回到常规终端提示符。
你现在已成功在 PostgreSQL 中删除了一个数据库。请记住在删除数据库时要谨慎,因为此操作是不可逆的。
查看数据库元数据
在这个步骤中,你将学习如何在 PostgreSQL 中查看数据库元数据(metadata)。元数据是“关于数据的数据”。在数据库的上下文中,元数据描述了数据库本身的结构和特征,包括关于表、列、数据类型和约束的信息。
打开终端: 如果你还没有打开终端,请启动一个终端窗口。
连接到
postgres数据库: 由于我们在上一步中删除了mydatabase,我们将连接到默认的postgres数据库来探索元数据。psql -d postgres你将看到
postgres=#提示符。列出表: 要列出当前连接的数据库中的所有表,你可以使用
\dt命令。\dt由于我们尚未创建任何表,因此输出应为空或显示系统表。它可能看起来像这样:
Did not find any relations.或者
List of relations Schema | Name | Type | Owner --------+-----------------------+-------+---------- pg_catalog | pg_aggregate | table | postgres pg_catalog | pg_am | table | postgres pg_catalog | pg_amop | table | postgres ...输出显示了每个表的模式(schema)、名称、类型和所有者。
描述一个表: 要查看有关特定表的详细信息,你可以使用
\d命令,后跟表名。由于我们没有用户创建的表,让我们检查一个系统表,例如pg_class。\d pg_class
此命令将显示
pg_class表的结构,包括列名、数据类型和任何约束。输出将非常广泛,但它提供了表定义的全面概述。Table "pg_catalog.pg_class" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description -------------------+-----------+-----------+----------+---------+----------+--------------+------------- oid | oid | | not null | | plain | | relname | name | | not null | | plain | | relnamespace | oid | | not null | | plain | | reltype | oid | | not null | | plain | | reloftype | oid | | not null | | plain | | relowner | oid | | not null | | plain | | relam | oid | | not null | | plain | | relfilenode | oid | | not null | | plain | | reltablespace | oid | | not null | | plain | | relpages | integer | | not null | | plain | | reltuples | real | | not null | | plain | | relallvisible | boolean | | not null | | plain | | reltoastrelid | oid | | not null | | plain | | relhasindex | boolean | | not null | | plain | | relhasrules | boolean | | not null | | plain | | relhastriggers | boolean | | not null | | plain | | relhassubclass | boolean | | not null | | plain | | relrowsecurity | boolean | | not null | | plain | | relforcerowsecurity| boolean | | not null | | plain | | relispopulated | boolean | | not null | | plain | | relreplident | character | | not null | | plain | | relispartition | boolean | | not null | | plain | | relrewrite | oid | | not null | | plain | | relacl | aclitem[] | | | | plain | | reloptions | text[] | | | | plain | | relpartbound | pg_node_tree | | | | extended | | Indexes: "pg_class_oid_index" UNIQUE, btree (oid) "pg_class_relname_nsp_index" UNIQUE, btree (relname, relnamespace) Foreign-key constraints: "pg_class_relam_fkey" FOREIGN KEY (relam) REFERENCES pg_am(oid) "pg_class_relnamespace_fkey" FOREIGN KEY (relnamespace) REFERENCES pg_namespace(oid) "pg_class_relowner_fkey" FOREIGN KEY (relowner) REFERENCES pg_authid(oid) "pg_class_reltoastrelid_fkey" FOREIGN KEY (reltoastrelid) REFERENCES pg_class(oid) Referenced by: TABLE "pg_statistic_ext" CONSTRAINT "pg_statistic_ext_relid_fkey" FOREIGN KEY (relid) REFERENCES pg_class(oid) TABLE "pg_rewrite" CONSTRAINT "pg_rewrite_ev_class_fkey" FOREIGN KEY (ev_class) REFERENCES pg_class(oid) TABLE "pg_trigger" CONSTRAINT "pg_trigger_tgrelid_fkey" FOREIGN KEY (tgrelid) REFERENCES pg_class(oid)退出 psql: 要退出
psql提示符,请输入:\q然后按 Enter 键。你将返回到常规终端提示符。
你现在已成功使用 psql 在 PostgreSQL 中查看了数据库元数据。这使你可以了解数据库和表的结构和属性。
总结
在这个实验中,你学习了 PostgreSQL 中数据库管理的基础知识,从创建新数据库开始。该过程包括在终端中使用 createdb 命令,后跟所需的数据库名称。成功执行将创建数据库,而没有任何输出。
为了验证创建,你可以使用 psql -d postgres 连接到默认的 postgres 数据库,然后使用 \l 命令列出所有可用的数据库,确认新创建的数据库是否存在。


