数据库对象的逻辑结构

数据库对象的逻辑结构指数据库中的各种数据对象之间的关系和组织方式。AnalyticDB PostgreSQL数据库由许多数据库对象组成,包括表(table)、索引(index)、序列(sequence)、视图(view)、以及数据库(database),数据库对象在逻辑上是彼此分离,相互之间可以有包含关系。

一个AnalyticDB PostgreSQL实例中有多个数据库,表、索引等数据库对象都属于相应的数据库。数据库对象的整体逻辑结构如下图所示。

数据库对象的逻辑结构

数据库

一个AnalyticDB PostgreSQL实例下面可以有多个数据库,在psql工具中可以通过\l语句可以查看已经创建的数据库,返回示例如下。

postgres=# \l
                                      List of databases
   Name    |   Owner    | Encoding |  Collate   |   Ctype    |       Access privileges
-----------+------------+----------+------------+------------+-------------------------------
 diskquota | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 |
 postgres  | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 | =c/"xiaoxia.zj"              +
           |            |          |            |            | "xiaoxia.zj"=CTc/"xiaoxia.zj"
 template1 | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 | =c/"xiaoxia.zj"              +
           |            |          |            |            | "xiaoxia.zj"=CTc/"xiaoxia.zj"
 zj        | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 |

表、索引与视图等

与通常关系型数据库一样,AnalyticDB PostgreSQL将数据组织为表的形式,并且提供索引、视图以及序列等功能,详细使用方法,请参见PostgreSQL官方文档

模式

一个数据库包含一个或多个已命名的模式(Schema),模式又包含表以及其他对象,包括数据类型、函数、操作符等。

创建模式的命令如下:

CREATE SCHEMA myschema;

创建和访问一个表的时候需要在前面加上模式名组成模式名.表名的形式,示例如下。

CREATE TABLE myschema.mytable(···)···;
SELECT * FROM myschema.mytable;

模式具有搜索路径,可以设置search_path配置参数来指定在其中搜索对象的可用模式的顺序。在该搜索路径中第一个列出的模式会成为所谓的默认方案。如果没有指定模式,通常将使用默认的public模式。您可以通过语句修改模式搜索路径。修改默认方案的语句示例如下。

ALTER DATABASE mydatabase SET search_path TO myschema;

表空间

表空间(Tablespace)使得用户可以在其中创建对象的位于文件系统中的命名位置。使用表空间可以将不同的数据库对象放在不同的存储位置。例如,把频繁使用的表放在SSD硬盘上,而把其他表放在传统磁盘上。

在逻辑上,不同的表空间用于存放不同的数据库对象,例如不同的数据库(Database)可以存在于不同的表空间中,这代表他们的物理存储位置不同。

数据库对象的逻辑结构-表空间

在查看数据库的时候使用\l+可以看到所属的表空间。

postgres=# \l+
 diskquota | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 |                               | 69 MB   | pg_default |
 postgres  | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 |                               | 72 MB   | pg_default | default administrative connection database
 template0 | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 | =c/"xiaoxia.zj"              +| 69 MB   | pg_default | unmodifiable empty database
           |            |          |            |            | "xiaoxia.zj"=CTc/"xiaoxia.zj" |         |            |
 template1 | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 | =c/"xiaoxia.zj"              +| 69 MB   | pg_default | default template for new databases
           |            |          |            |            | "xiaoxia.zj"=CTc/"xiaoxia.zj" |         |            |
 zj        | xiaoxia.zj | UTF8     | en_US.utf8 | en_US.utf8 |                               | 1062 MB | pg_default |

在一个表空间上拥有CREATE权限的用户可以在其中创建数据库对象,例如表、索引和数据库。示例如下。

CREATE TABLE tablename(options) TABLESPACE spacename;