Postgres数据库之增加dm默认表空间main学习汇总

本文详细介绍了PostgreSQL中如何增加默认表空间main,包括表空间的作用、与数据库的关系,以及创建和管理默认表空间的主要步骤和注意事项。讨论了存储表空间信息的系统表,并提供了一个新增默认表空间main的案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习参考书籍、网站或博文:

  1. 参考书籍:《PostgreSQL数据库内核分析》
  2. PostgreSQL 表空间官方文档,点击前往

背景

近期接触的项目需要在PostgreSQL数据库上增加dm默认表空间main,因此在此做以学习总结。
先来看看dm数据库上查询的结果:
在这里插入图片描述
PostgreSQL数据库的默认表空间有哪些?
在这里插入图片描述

表空间概述

PostgreSQL中的表空间允许数据库管理员在文件系统中定义用来存放表示数据库对象的文件的位置。一旦被创建,表空间就可以在创建数据库对象时通过名称引用。在PostgreSQL中表空间实际上就是给表指定一个存储目录。

表空间的作用

使用表空间,管理员可以控制一个PostgreSQL安装的磁盘布局。主要有两个用处。

  • 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。
  • 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。

表空间和数据库的关系

Oracle数据库:一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。"一对多"的关系
PostgreSQL数据库:一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。"多对多"的关系。

系统默认表空间

PostgreSQL数据库默认表空间有pg_defaultpg_global,这两个默认表空间在初始化数据库集簇时,会自动创建

  • pg_defaulttemplate1template0数据库的默认表空间(因此也将是所有其他数据库的默认表空间),用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$PADATA/base/
  • pg_global 用于存储共享系统目录;对应存储目录$PADATA/global/

除此之外$PGDATA/pg_tblspc目录包含指向集簇中定义的每个非内建表空间的符号连接。初始化数据库集簇之后,该目录是空的,当手动增加表空间时,该目录下会自动生成一个软连接,指向新创建的表空间设定的路径。
例如:
创建一个表空间

postgres=# CREATE TABLESPACE fastspace LOCATION '/home/postgres/study/pg_systab/bin/mytabspace';
CREATE TABLESPACE
postgres=# 
postgres=# select * from pg_tablespace;
  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+------------+----------+--------+------------
  1663 | pg_default |       10 |        | 
  1664 | pg_global  |       10 |        | 
 16384 | fastspace  |       10 |        | 
(3 rows)

postgres=#
[postgres@local99:~/study/pg_systab/bin/data/pg_tblspc]$ ls
16384
[postgres@local99:~/study/pg_systab/bin/data/pg_tblspc]$ ll 16384
lrwxrwxrwx. 1 postgres postgres 45 May 20 16:04 16384 -> /home/postgres/study/pg_systab/bin/mytabspace
[postgres@local99:~/study/pg_systab/bin/data/pg_tblspc]$ 

几点注意:

  • 这个/home/postgres/study/pg_systab/bin/mytabspace必须是一个已有的空目录,并且属于PostgreSQL操作系统用户。 所有后续在该表空间中创建的对象都将被存放在这个目录下的文件中。该位置不能放在可移动 或者瞬时存储上,因为如果表空间丢失会导致集簇无法工作。
  • 表空间必须由一个数据库超级用户创建,但在创建完之后之后可以允许普通数据库用户来使用它

存储表空间信息的系统表

pg_tablespace存储关于可用表空间的信息。表可以被放置在特定表空间中以实现磁盘布局的管理

  • oid 行标识符
  • spcname 表空间名
  • spcowner 表空间的拥有者,通常是创建它的用户对应的oid( pg_authid.oid
  • spcacl 访问权限
  • spcoptions 表空间级别的选项
postgres=# select * from pg_tablespace;
  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+------------+----------+--------+------------
  1663 | pg_default |       10 |        | 
  1664 | pg_global  |       10 |        | 
 16384 | fastspace  |       10 |        | 
(3 rows)
postgres=# select * from pg_authid ;
 oid  |          rolname          | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值