暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Postgresql表空间管理

有时我们需要把不同的表放到不同的存储介质或文件系统下, 这时就需要用到表空间, 在PostgreSQL中, 表空间实际上是为表指定一个存储目录。

在创建数据库时可以为其指定默认的表空间。
创建表、 创建索引的时候可以指定表空间, 这样表、 索引就可以存储到表空间对应的目录下了。

创建表空间

创建表空间的语法如下:

CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory'

例:

CREATE TABLESPACE tbs_data location '/data/pgdata';

指定默认表空间

创建数据库时可以指定默认的表空间, 这样以后在此数据库中创建表、 索引时就可以自动存储到表空间指定的目录下:

create database db01 tablespace tbs_data;

改变数据库的默认表空间的语法如下:

ALTER DATABASE db01 set TABLESPACE tbs_data;

注:在执行该操作时, 不能有用户连接到这个数据库上, 否则会报如下错误:

ERROR: database "db01" is being accessed by other users
DETAIL: There is 1 other session using the database.

另外, 改变数据库的默认表空间时, 数据库中已有表的表空间不会改变。

创建表时也可以指定表空间, 命令如下:

create table test01(id int, note text) tablespace tbs_data;

创建索引时同样可以指定表空间, 命令如下:

create index idx_test01_id on test01(id) tablespace tbs_data;

创建唯一约束时可指定约束索引的表空间, 命令如下:

ALTER TABLE test01 ADD CONSTRAINT unique_test01_id unique(id) USING INDEX TABLESPACE tbs_data;

增加主键时也可以指定主键索引的表空间, 命令如下:

ALTER TABLE test01 ADD CONSTRAINT pk_test01_id primary key(id) USING INDEX TABLESPACE tbs_data;

查看表空间

表空间信息位于pg_tablespace中:

select * from pg_tablespace;

查询表空间及位置要用到pg_tablespace_location():

SELECT
    t.spcname AS "Tablespace Name",
    t.spcacl AS "Access Privileges",
    pg_tablespace_location(t.oid) AS "Location"
FROM
    pg_tablespace t;

查询一个数据库下各种对象所在表空间,若为空表示是数据库默认表空间:

SELECT n.nspname AS schema
	,c.relname AS relname
	,t.spcname AS tablespace
	,c.relkind     
FROM pg_class c
inner JOIN pg_namespace n 
	ON n.oid = c.relnamespace
LEFT JOIN pg_tablespace t 
	ON t.oid = c.reltablespace
WHERE n.nspname NOT LIKE 'pg_%' 
	AND n.nspname NOT LIKE 'information_schema%'
order by c.relkind 
	,c.relname 
;

修改表空间

把表从一个表空间移到另一个表空间的命令如下:

alter table test01 set tablespace pg_default;

把索引从一个表空间移到另一个表空间的命令如下:

ALTER INDEX index_name SET TABLESPACE new_tablespace;

注意, 在移动表的时候表会被锁定, 对此表的所有操作都将无法执行, 包括SELECT操作, 所以请考虑在合适的时机做这个操作。

最后修改时间:2024-12-27 14:51:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论