在 PostgreSQL 中查看表的定义或结构

本文介绍了在 PostgreSQL 查看数据表的定义或结构的两种方法。

PostgreSQL 提供了两种方法查看一个现有的表的定义或者结构:

  • psql 工具中使用 \d 或者 \d+ 列出当前数据库中的所有的表。
  • information_schema.columns 中查询表中的列。

使用 \d 查看表的信息

本实例演示了使用 psql 工具登录数据库并查看表信息的详细步骤。请按照如下步骤进行:

  1. 使用 postgres 用户登录 PostgreSQL 服务器:

    [~] psql -U postgres
    psql (14.4)
    Type "help" for help.
    

    注意:您也可以使用其他任何具有相应的数据库权限的用户登录。

  2. 使用以下语句选择 testdb 数据库:

    \c testdb;
    

    如果还未创建数据库,请先运行如下语句:

    CREATE DATABASE testdb;
    
  3. 以下语句使用 \d 命令查看 test_date 表的结构,如下:

    \d test_date
    
                            Table "public.test_date"
       Column   |  Type   | Collation | Nullable |           Default
    ------------+---------+-----------+----------+------------------------------
     id         | integer |           | not null | generated always as identity
     date_value | date    |           | not null | CURRENT_DATE
     Indexes:
        "test_date_pkey" PRIMARY KEY, btree (id)

    您可以看到,\d 输出了表的名字、表中的列,表中的约束等信息。

  4. 如果要查看更多关于 test_date 表的信息,请使用 \d+ 命令,如下:

    \d+ test_date
    
                                                       Table "public.test_date"
       Column   |  Type   | Collation | Nullable |           Default            | Storage | Compression | Stats target | Description
    ------------+---------+-----------+----------+------------------------------+---------+-------------+--------------+-------------
     id         | integer |           | not null | generated always as identity | plain   |             |              |
     date_value | date    |           | not null | CURRENT_DATE                 | plain   |             |              |
     Indexes:
        "test_date_pkey" PRIMARY KEY, btree (id)
     Access method: heap

    您可以看到, \d+ 的输入比 \d 输出多了 Compression, Stats targetDescription 列。

从 information_schema 中查看表中的所有列

information_schema 是一个系统级的 Schema, 其中提供了一些视图可以查看表、列、索引、函数等信息。

information_schema.columns 目录包含有关所有表的列的信息。

以下语句从 information_schema.columns 中查询 test_date 表的所有的列:

SELECT
   table_name,
   column_name,
   data_type,
   column_default
FROM
   information_schema.columns
WHERE
   table_name = 'test_date';
 table_name | column_name | data_type | column_default
------------+-------------+-----------+----------------
 test_date  | id          | integer   |
 test_date  | date_value  | date      | CURRENT_DATE
(2 rows)

以上语句返回了 test_date 表的所有的列的信息,包括 列名,数据类型,默认值。

结论

PostgreSQL 提供了两种方法查看一个现有的表的定义或者结构:

  • psql 工具中使用 \d 或者 \d+ 列出当前当前数据库中的所有的表。
  • information_schema.columns 中查询表中的列。

在 MySQL 中,您可以使用 DESCRIBE 命令列出查看表中的列。