PostgreSQL的表空间

PostgreSQL中的表空间允许数据库管理员在文件系统中定义可以存储表示数据库对象的文件的位置。创建后,可以在创建数据库对象时按名称引用表空间。

通过使用表空间,管理员可以控制PostgreSQL安装的磁盘布局。这至少在两个方面很有用。首先,如果初始化集群的分区或卷空间不足并且无法扩展,则可以在不同的分区上创建表空间并使用,直到可以重新配置系统。其次,表空间允许管理员使用数据库对象的使用模式的知识来优化性能。例如,非常频繁使用的索引可以放置在非常快速,高度可用的磁盘上,如昂贵的固态设备。同时,存储很少使用或不具有性能关键的存档数据的表可以存储在较便宜,较慢的磁盘系统上。

即使位于PostgreSQL主数据目录之外,表空间也是数据库集群的组成部分,不能被视为数据文件的自治集合。它们依赖于主数据目录中包含的元数据,因此无法附加到其他数据库集群或单独备份。同样,如果丢失表空间(文件删除,磁盘故障等),数据库群集可能会变得不可读或无法启动。将表空间放在像RAM磁盘这样的临时文件系统上会降低整个集群的可靠性。

创建一个表空间:

postgres=# create tablespace pgtbl_test location ‘/pgtest‘;

该位置必须是PostgreSQL操作系统用户拥有的现有空目录。随后在表空间中创建的所有对象都将存储在此目录下的文件中。该位置不能位于可移动或临时存储上,因为如果表空间丢失或丢失,群集可能无法运行。

必须以数据库超级用户身份创建表空间本身,但之后您可以允许普通数据库用户使用它。为此,请为其授予CREATE权限。

可以将表,索引和整个数据库分配给特定的表空间。为此,具有给定表空间的CREATE特权的用户必须将表空间名称作为参数传递给相关命令。例如,以下内容在表空间中创建一个表:

postgres=# create table foo(i int) tablespace pgtbl_test;

  

也可以将创建的表空间设置为默认表空间:

set default_tablespace = pgtbl_test;
create table foo(i int);

  

初始化数据库集群时会自动创建两个表空间。pg_global表空间用于共享系统目录。pg_default表空间是template1和template0数据库的缺省表空间(因此,它也将是其他数据库的缺省表空间,除非被CREATE DATABASE中的TABLESPACE子句覆盖)。

1.pg_default和pg_global表空间是在initdb()时候创建的
2.如果没有显式指定表空间,默认存储在pg_default表空间中
3.数据库集群级别管理的表被存放在pg_global表空间中
4.pg_default表空间物理位置是$PGDATA/base
5.pg_global表空间物理位置是$PGDATA/global
6.一个表空间可以被多个数据库公用
7.用户创建的表空间在$PGDATA/tblspc目录中会创建对应的符号链接

创建后,只要请求用户具有足够的权限,就可以从任何数据库使用表空间。这意味着在删除使用表空间的所有数据库中的所有对象之前,不能删除表空间。

查看已有的表空间:

postgres=# select * from pg_tablespace;
  spcname   | spcowner | spcacl | spcoptions
------------+----------+--------+------------
 pg_default |       10 |        |
 pg_global  |       10 |        |
 myspc      |       10 |        |
 pgtbl_test |       10 |        |
(4 rows)

postgres=# \db
               List of tablespaces
    Name    |  Owner   |        Location
------------+----------+-------------------------
 myspc      | postgres | /data/pgdata/10/test_ts
 pg_default | postgres |
 pg_global  | postgres |
 pgtbl_test | postgres | /pgtest
(4 rows)

postgres=#

  

删除空的表空间:

postgres=# drop tablespace pgtbl_test;

  

目录$PGDATA/pg_tblspc包含指向集群中定义的每个非内置表空间的符号链接。 虽然不推荐,但可以通过重新定义这些链接来手动调整表空间布局。在任何情况下都不要在服务器运行时执行此操作。
请注意,在PostgreSQL 9.1及更早版本中,还需要使用新位置更新pg_tablespace目录。(如果不这样做,pg_dump将继续输出旧的表空间位置。)

原文地址:https://www.cnblogs.com/abclife/p/11384439.html

时间: 2024-07-29 16:28:39

PostgreSQL的表空间的相关文章

【PostgreSQL】表空间

在PostgreSQL中,表空间实际上是为表指定一个存储目录,这样方便我们把不同的表放在不同的存储介质或者文件系统中.在创建数据库.表.索引时都可以指定表空间. 1. 创建表空间 --表空间目录必须是系统中已存在的目录 test=# create tablespace tb_01 location '/opt/postgresql/data/pg_data'; CREATE TABLESPACE 2. 创建数据库,指定表空间 test=# create database test01 table

PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我的试验,并循序讲清其中关系. 首先,实验出角色与用户的关系    在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:   CRE

PostgreSQL表空间、模式、表、用户/角色之间的关系

PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关系 在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:CREATE ROLE kanon PASSWORD 'kanon';接着

生产环境修改PostgreSQL表索引对应的表空间

通过iostat命令发现某块磁盘的io使用率经常保持在100%,通过blkid命令获取linux raid存储盘符和挂载点的关系后,最后发现是挂载点上的一个数据库表空间在占用大io. 现象 [email protected]:~$ iostat -xm 3 |grep -v dm avg-cpu:  %user   %nice %system %iowait  %steal   %idle           11.68    0.00    3.82    8.63    0.00   75.

PostgreSQL表空间

postgres=# \h create tablespace Command: CREATE TABLESPACEDescription: define a new tablespaceSyntax:CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory' [ WITH ( tablespace_option = value [, ... ] ) ] postgres=# create tablespa

PostgreSQL表空间的使用

一.介绍 表空间的作用就是允许数据库管理员定义一个其他非数据目录的位置存储数据库对象. 使用场景之一是,如果机器新加了ssd,但是又不够整个实例使用,可以将一些重要和使用频率高的表和索引放到ssd上,提高查询效率 二.创建表空间 先创建要保存表空间的目录 # mkdir -p /export/tablespace1 # chown -R postgres: /export/tablespace1/ 进入数据库 postgres=# \db        List of tablespaces  

postgresql 表空间创建、删除

表空间:字面上理解就是表存储的物理空间,其实包括数据库的表.索引.序列等. 可以将表空间创建在服务器的不同分区,这样做的好处有: 一.如果初始化集群所在分区已经用光,可以方便的其他分区上创建表空间已达到扩容的目的. 二.对于频繁访问的数据可以存储在性能较高.较快的磁盘分区上,而不常用的数据存储在便宜的较慢的磁盘分区上. 语法: postgres=# \h create tablespace Command:     CREATE TABLESPACEDescription: define a n

Oracle 表空间和用户权限管理

一. 表空间 Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构指的是构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念以及它们之间的关系. 表空间是数据库逻辑结构的一个重要组件. 表空间可以存放各种应用对象,如表.索引等. 而每一个表空间由一个或多个数据文件组成. 1. 表空间的分类 表空间可分为3类: 永久性表空间:一般保存表.上天.过程和索引等数据.system.sysaux.users.example表空间是默认安装的. 临时性表空间:只用于保存

MySQL 表空间传送

1.源库查询表结构 mysql> show create table s_show\G *************************** 1. row ***************************        Table: study_show Create Table: CREATE TABLE `study_show` (   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,   `uid` int(11) DEFAULT '0'