PostgreSQL 数据库管理基础

PostgreSQLBeginner
立即练习

介绍

在这个实验(lab)中,你将学习使用 PostgreSQL 进行数据库管理的基础知识。这个实验涵盖了管理数据库的基本操作,包括创建新数据库、列出和连接到现有数据库,以及在不再需要时删除数据库。

你将首先使用 createdb 命令创建一个新数据库,并通过 psql 命令验证其创建。然后,你将学习如何列出所有可用的数据库并连接到特定的数据库。最后,你将探索如何删除数据库和查看数据库元数据。这个实验提供了一个 PostgreSQL 中基本数据库管理任务的实践介绍。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 88%。获得了学习者 100% 的好评率。

创建一个新数据库

在这个步骤中,你将学习如何在 PostgreSQL 中创建一个新的数据库。创建数据库是组织和存储数据的第一步。

在我们开始之前,让我们了解一下什么是数据库。数据库是数据的结构化集合,为了便于访问、管理和更新而组织。在 PostgreSQL 中,数据库是表、视图和其他数据库对象的容器。

要创建一个新的数据库,你将使用 createdb 命令。此命令是 SQL 命令 CREATE DATABASE 的包装器(wrapper)。

  1. 打开终端: 如果你还没有打开终端,请启动一个终端窗口。

  2. 创建新数据库: 使用 createdb 命令,后跟你要给数据库的名称。例如,要创建一个名为 mydatabase 的数据库,请运行以下命令:

    createdb mydatabase

    此命令将创建一个名为 mydatabase 的新数据库。如果命令成功,你将看不到任何输出。

  3. 验证数据库创建: 要确认数据库已创建,你可以使用 psql 命令列出所有数据库。首先,连接到 postgres 默认数据库:

    psql -d postgres

    你将看到 postgres=# 提示符。

  4. 列出数据库:postgres=# 提示符下,执行以下 SQL 命令以列出所有数据库:

    \l
    PostgreSQL 中的数据库列表

    此命令将显示数据库列表,包括你刚刚创建的数据库(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 在列表中。

  5. 退出 psql: 要退出 psql 提示符,请输入:

    \q

    然后按 Enter 键。你将返回到常规终端提示符。

你现在已成功在 PostgreSQL 中创建了一个新的数据库。

列出并连接到数据库

在这个步骤中,你将学习如何列出可用的数据库,并使用 psql 命令行工具连接到特定的数据库。

  1. 打开终端: 如果你还没有打开终端,请启动一个终端窗口。

  2. 列出可用的数据库: 要列出所有数据库,你可以使用带有 -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 数据库。

  3. 连接到特定的数据库: 要连接到特定的数据库,请使用带有 -d 选项的 psql 命令,后跟数据库的名称。例如,要连接到 mydatabase 数据库,请运行以下命令:

    psql -d mydatabase

    如果连接成功,你将看到 mydatabase=# 提示符。这表示你现在已连接到 mydatabase 数据库。

  4. 验证连接: 要验证你是否已连接到正确的数据库,你可以执行一个简单的 SQL 命令,例如:

    SELECT version();
    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)
  5. 退出 psql: 要退出 psql 提示符,请输入:

    \q

    然后按 Enter 键。你将返回到常规终端提示符。

你现在已成功列出了可用的数据库,并使用 psql 连接到特定的数据库。

删除数据库

在这个步骤中,你将学习如何在 PostgreSQL 中删除(drop)一个数据库。删除数据库是一个永久性的操作,因此在使用此命令时务必小心。 数据库中的所有数据都将丢失。

  1. 打开终端: 如果你还没有打开终端,请启动一个终端窗口。

  2. 删除数据库: 使用 dropdb 命令,后跟你要删除的数据库的名称。例如,要删除 mydatabase 数据库,请运行以下命令:

    dropdb mydatabase

    此命令将删除 mydatabase 数据库。如果命令成功,你将看不到任何输出。

    重要提示: 在删除数据库之前,请确保没有人连接到它。如果存在活动连接,则 dropdb 命令可能会失败。

  3. 验证数据库删除: 要确认数据库已删除,你可以使用 psql 命令列出所有数据库。首先,连接到 postgres 默认数据库:

    psql -d postgres
    连接到 postgres 后的提示符

    你将看到 postgres=# 提示符。

  4. 列出数据库: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,则表示已成功删除。

  5. 退出 psql: 要退出 psql 提示符,请输入:

    \q

    然后按 Enter 键。你将返回到常规终端提示符。

你现在已成功在 PostgreSQL 中删除了一个数据库。请记住在删除数据库时要谨慎,因为此操作是不可逆的。

查看数据库元数据

在这个步骤中,你将学习如何在 PostgreSQL 中查看数据库元数据(metadata)。元数据是“关于数据的数据”。在数据库的上下文中,元数据描述了数据库本身的结构和特征,包括关于表、列、数据类型和约束的信息。

  1. 打开终端: 如果你还没有打开终端,请启动一个终端窗口。

  2. 连接到 postgres 数据库: 由于我们在上一步中删除了 mydatabase,我们将连接到默认的 postgres 数据库来探索元数据。

    psql -d postgres

    你将看到 postgres=# 提示符。

  3. 列出表: 要列出当前连接的数据库中的所有表,你可以使用 \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)、名称、类型和所有者。

  4. 描述一个表: 要查看有关特定表的详细信息,你可以使用 \d 命令,后跟表名。由于我们没有用户创建的表,让我们检查一个系统表,例如 pg_class

    \d pg_class
    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)
  5. 退出 psql: 要退出 psql 提示符,请输入:

    \q

    然后按 Enter 键。你将返回到常规终端提示符。

你现在已成功使用 psql 在 PostgreSQL 中查看了数据库元数据。这使你可以了解数据库和表的结构和属性。

总结

在这个实验中,你学习了 PostgreSQL 中数据库管理的基础知识,从创建新数据库开始。该过程包括在终端中使用 createdb 命令,后跟所需的数据库名称。成功执行将创建数据库,而没有任何输出。

为了验证创建,你可以使用 psql -d postgres 连接到默认的 postgres 数据库,然后使用 \l 命令列出所有可用的数据库,确认新创建的数据库是否存在。