九月 14, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的CREATE TABLESPACE
语句创建表空间。
目录
PostgreSQL 表空间简介
表空间是磁盘上的一个位置,PostgreSQL 在其中存储包含数据库对象(例如索引和表)的数据文件。
PostgreSQL 使用表空间将逻辑名称映射到磁盘上的物理位置。
PostgreSQL 有两个默认表空间:
pg_default
表空间存储用户数据。pg_global
表空间存储全局数据。
表空间允许您控制 PostgreSQL 的磁盘布局。使用表空间有两个主要优点:
- 首先,如果实例初始化时的分区空间不足,您可以在不同的分区上创建一个新表空间并使用它,直到重新配置系统。
- 其次,可以使用统计数据来优化数据库性能。例如,您可以将频繁访问的索引或表放置在性能非常快的设备(例如固态设备)上,并将包含很少使用的存档数据的表放置在速度较慢的设备上。
PostgreSQL CREATE TABLESPACE 语句
要创建新表空间,请使用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
语句中指定存储对象数据文件的表空间。
PostgreSQL CREATE TABLESPACE 示例
以下语句使用CREATE TABLESPACE
创建一个名为ts_primary
的新表空间,其物理位置为c:\pgdata\primary
。
CREATE TABLESPACE ts_primary
LOCATION 'c:\pgdata\primary';
请注意,该语句使用 Unix 风格的斜杠表示目录路径。在执行该命令之前,c:\pgdata\primary
必须存在。
要列出当前 PostgreSQL 数据库服务器中的所有表空间,请使用以下\db
命令:
\db
输出:
List of tablespaces
Name | Owner | Location
------------+----------+-------------------
pg_default | postgres |
pg_global | postgres |
ts_primary | postgres | c:\pgdata\primary
(4 rows)
\db+
命令显示更多信息,例如大小和访问权限:
List of tablespaces
Name | Owner | Location | Access privileges | Options | Size | Description
------------+----------+-------------------+-------------------+---------+---------+-------------
pg_default | postgres | | | | 124 MB |
pg_global | postgres | | | | 625 kB |
ts_primary | postgres | c:\pgdata\primary | | | 0 bytes |
(4 rows)
以下语句使用ts_primary
表空间创建logistics
数据库:
CREATE DATABASE logistics
TABLESPACE ts_primary;
TABLESPACE
子句指示logistics
数据库将用于存储数据的表空间。
以下语句创建一个新表,名为deliveries
,并向该表中插入一行:
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
表空间有一些数据,可以在psql
中使用以下命令查看其信息:
\db+ ts_primary
输出:
Name | Owner | Location | Access privileges | Options | Size | Description
------------+----------+-------------------+-------------------+---------+---------+-------------
ts_primary | postgres | c:\pgdata\primary | | | 8033 kB |
(1 row)
概括
- 表空间是存储设备上 PostgreSQL 存储数据文件的位置。
- 使用
CREATE TABLESAPCE
语句创建一个新的表空间。