PostgreSQL 表空间(TABLESPACE)

本文详细介绍了PostgreSQL的表空间概念及其作用,包括默认的pg_default和pg_global表空间。表空间允许控制数据库的磁盘布局,通过创建新表空间可在不同分区存储数据,优化性能。例如,将热数据放在SSD,冷数据放在HDD。创建表空间使用`CREATETABLESPACE`语句,指定表空间名、所有者和目录路径。通过示例展示了如何创建表空间、数据库以及在特定表空间上创建表和插入数据。最后,强调了表空间在数据库管理和性能调优中的重要性。
部署运行你感兴趣的模型镜像

1. 表空间介绍

表空间即PostgreSQL存储数据文件的位置,其中包括数据库对象。如,索引、表等。
PostgreSQL使用表空间映射逻辑名称和磁盘物理位置。默认提供了两个表空间:

  • pg_default 表空间存储用户数据.
  • pg_global 表空间存储全局数据.

利用表空间可以控制PostgreSQL的磁盘布局,它有两方面的优势:

首先,如果集群中的某个分区超出初始空间,可以在另一个分区上创建新的表空间并使用。后期可以重新配置系统。

其次,可以使用统计优化数据库性能。举例,可以把频繁访问的索引或表放在高性能的磁盘上,如固态硬盘;把归档数据放在较慢的设备上。

2. 创建表空间

下面介绍如何创建表空间,并通过示例进行学习。

2.1 创建表空间语句

使用CREATE TABLESPACE语句创建表空间,语法如下:

CREATE TABLESPACE tablespace_name
OWNER user_name
LOCATION directory_path;

表空间名称不能以pg开头,因为这些名称为系统表空间保留。默认执行CREATE TABLESPACE语句的用户是表空间的拥有者。如果需要给其他用户赋权,可以值后面指定owner关键词。

directory_path是表空间使用空目录的绝对路径,PostgreSQL的用户必须拥有该目录的权限可以进行读写操作。

一旦创建好表空间,可以在CREATE DATABASE, CREATE TABLE 和 CREATE INDEX 语句中使用。

2.2 示例

下面语句创建新的表空间ts_primary

CREATE TABLESPACE ts_primary 
LOCATION 'e:\pg-data\primary';

上面示例使用unix风格斜杠作为目录路径,该目录必须要存在。列出所有表空间使用\db:

postgres=# \db
                 表空间列表
    名称    |  拥有者  |       所在地
------------+----------+--------------------
 pg_default | postgres |
 pg_global  | postgres |
 ts_primary | postgres | E:\pg-data\primary
(3 行记录)

读者可以使用\db+查看更详细的表空间信息。

postgres=# \db+
                                  表空间列表
    名称    |  拥有者  |       所在地       | 存取权限 | 选项 |  大小   | 描述
------------+----------+--------------------+----------+------+---------+------
 pg_default | postgres |                    |          |      | 6558 MB |
 pg_global  | postgres |                    |          |      | 575 kB  |
 ts_primary | postgres | E:\pg-data\primary |          |      | 7513 kB |
(3 行记录)

下面语句创建logistics数据库并使用ts_primary表空间:

CREATE DATABASE logistics 
TABLESPACE ts_primary;

TABLESPACE子句指定要使用的表空间。

下面在logistics数据库中创建表并插入一行数据:

CREATE TABLE deliveries (
    delivery_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, 
    order_date DATE, 
    customer_id INT
);

INSERT INTO deliveries(order_date, customer_id)
VALUES('2020-08-01',1);

既然ts_primary表空间上已经有了数据,我们进行查看并验证:

\db+ ts_primary

输出结果:

postgres=# \db+ ts_primary
                                  表空间列表
    名称    |  拥有者  |       所在地       | 存取权限 | 选项 |  大小   | 描述
------------+----------+--------------------+----------+------+---------+------
 ts_primary | postgres | E:\pg-data\primary |          |      | 7513 kB |
(1 行记录)

3. 总结

本文介绍了如何创建表空间。表空间是存储设备的具体位置,PostgreSQL用其实际存储数据文件。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值