數(shù)據(jù)庫(kù)對(duì)象的邏輯結(jié)構(gòu)
數(shù)據(jù)庫(kù)對(duì)象的邏輯結(jié)構(gòu)指數(shù)據(jù)庫(kù)中的各種數(shù)據(jù)對(duì)象之間的關(guān)系和組織方式。AnalyticDB PostgreSQL數(shù)據(jù)庫(kù)由許多數(shù)據(jù)庫(kù)對(duì)象組成,包括表(table)、索引(index)、序列(sequence)、視圖(view)、以及數(shù)據(jù)庫(kù)(database),數(shù)據(jù)庫(kù)對(duì)象在邏輯上是彼此分離,相互之間可以有包含關(guān)系。
一個(gè)AnalyticDB PostgreSQL實(shí)例中有多個(gè)數(shù)據(jù)庫(kù),表、索引等數(shù)據(jù)庫(kù)對(duì)象都屬于相應(yīng)的數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)對(duì)象的整體邏輯結(jié)構(gòu)如下圖所示。
數(shù)據(jù)庫(kù)
一個(gè)AnalyticDB PostgreSQL實(shí)例下面可以有多個(gè)數(shù)據(jù)庫(kù),在psql工具中可以通過(guò)\l
語(yǔ)句可以查看已經(jīng)創(chuàng)建的數(shù)據(jù)庫(kù),返回示例如下。
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 |
表、索引與視圖等
與通常關(guān)系型數(shù)據(jù)庫(kù)一樣,AnalyticDB PostgreSQL將數(shù)據(jù)組織為表的形式,并且提供索引、視圖以及序列等功能,詳細(xì)使用方法,請(qǐng)參見(jiàn)PostgreSQL官方文檔。
模式
一個(gè)數(shù)據(jù)庫(kù)包含一個(gè)或多個(gè)已命名的模式(Schema),模式又包含表以及其他對(duì)象,包括數(shù)據(jù)類型、函數(shù)、操作符等。
創(chuàng)建模式的命令如下:
CREATE SCHEMA myschema;
創(chuàng)建和訪問(wèn)一個(gè)表的時(shí)候需要在前面加上模式名組成模式名.表名
的形式,示例如下。
CREATE TABLE myschema.mytable(···)···;
SELECT * FROM myschema.mytable;
模式具有搜索路徑,可以設(shè)置search_path配置參數(shù)來(lái)指定在其中搜索對(duì)象的可用模式的順序。在該搜索路徑中第一個(gè)列出的模式會(huì)成為所謂的默認(rèn)方案。如果沒(méi)有指定模式,通常將使用默認(rèn)的public模式。您可以通過(guò)語(yǔ)句修改模式搜索路徑。修改默認(rèn)方案的語(yǔ)句示例如下。
ALTER DATABASE mydatabase SET search_path TO myschema;
表空間
表空間(Tablespace)使得用戶可以在其中創(chuàng)建對(duì)象的位于文件系統(tǒng)中的命名位置。使用表空間可以將不同的數(shù)據(jù)庫(kù)對(duì)象放在不同的存儲(chǔ)位置。例如,把頻繁使用的表放在SSD硬盤上,而把其他表放在傳統(tǒng)磁盤上。
在邏輯上,不同的表空間用于存放不同的數(shù)據(jù)庫(kù)對(duì)象,例如不同的數(shù)據(jù)庫(kù)(Database)可以存在于不同的表空間中,這代表他們的物理存儲(chǔ)位置不同。
在查看數(shù)據(jù)庫(kù)的時(shí)候使用\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 |
在一個(gè)表空間上擁有CREATE權(quán)限的用戶可以在其中創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,例如表、索引和數(shù)據(jù)庫(kù)。示例如下。
CREATE TABLE tablename(options) TABLESPACE spacename;