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;