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

社区博客 | PostgreSQL 表空间

点击上方蓝字关注我们





导读

PostgreSQL 中的表空间允许数据库管理员在文件系统中定义用来存放表示数据库对象的文件的位置。一旦被创建,表空间就可以在创建数据库对象时被引用,如创建数据库、表、索引和添加索引时指定表空间。


原文作者:CSDN博主[脑子进水养啥鱼?]


关键词:PostgreSQL、表空间


01  
概述


管理员可以利用表空间控制 PostgreSQL 的磁盘布局,这么做至少有如下两个用处。

  • 初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展时,表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。

  • 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。


02  
创建使用表空间

2.1 语法
    CREATE TABLESPACE tablespace_name
    [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
    LOCATION 'directory'
    [ WITH ( tablespace_option = value [, ... ] ) ]

    参数说明:
    • tablespace_name:要创建的表空间的名称。名称不能以 pg_ 开头,因为这样的名称是为系统表空间保留的。
    • new_owner:将拥有该表空间的用户名。如果省略,默认为执行该命令的用户。只有超级用户能创建表空间,但是它们能把表空间的拥有权赋予给非超级用户。
    • directory:要被用于表空间的目录。该目录必须存在(CREATE TABLESPACE 将不创建它),应该为空,并且必须由 PostgreSQL 系统用户拥有。该目录必须用一个绝对路径指定。
    • tablespace_option:要设置或者重置的表空间参数。当前,唯一可用的参数是 seq_page_cost、random_page_cost、 effective_io_concurrency 以及 maintenance_io_concurrency。为一个特定表空间设定这些值将覆盖规划器对该表空间中表页读取的 常规代价估计,和执行程序的预取行为,由同名的配置参数确定。如果一个表空间位于一个比其他 I/O 子系统更慢或者更快的磁盘上,这些参数就能发挥作用。

    2.2 示例

    要在文件系统位置/data/dbs创建表空间dbspace,首先使用操作系统工具创建目录并设置正确的所有权。
      mkdir data/dbs
      chown postgres:postgres data/dbs

      数据库中发出表空间创建命令。
        --创建表空间 dbspace
        CREATE TABLESPACE dbspace LOCATION '/data/dbs';
        --创建数据库时使用指定表空间 dbspace
        CREATE DATABASE db01 TABLESPACE dbspace;
        --创建表时使用指定表空间 dbspace
        CREATE TABLE test01(id int, note text) TABLESPACE dbspace;
        --创建索引时使用指定表空间 dbspace
        CREATE INDEX idx_test01_id on test01(id) TABLESPACE dbspace;
        --添加约束时使用指定表空间 dbspace
        ALTER TABLE test01 ADD CONSTRAINT unique_test01_id unique(id) USING INDEX TABLESPACE dbspace;


        03  
        修改表空间

        3.1 语法
          ALTER TABLESPACE name RENAME TO new_name
          ALTER TABLESPACE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
          ALTER TABLESPACE name SET ( tablespace_option = value [, ... ] )
          ALTER TABLESPACE name RESET ( tablespace_option [, ... ] )

          参数说明:
          • name:一个现有表空间的名称。
          • new_name:该表空间的新名称。新名称不能以pg_开头,因为这样的名称是为系统表空间保留的。
          • new_owner:该表空间的新拥有者。
          • tablespace_option:要设置或者重置的一个表空间参数。当前,唯一可用的参数是 seq_page_cost、random_page_cost、 effective_io_concurrency 和 maintenance_io_concurrency。为一个特定表空间设定这两个参数值将覆盖规划器对从该表空间中的表读取页面代价的估计值,以及执行者的预取行为,这些估计值由具有相同名称配置参数建立。如果一个表空间位于一个比其余 I/O 子系统更快或者更慢的磁盘上时,这些参数就能派上用场。

          3.2 示例
            --将表空间 index_space 重命名为 fast_raid
            ALTER TABLESPACE index_space RENAME TO fast_raid;
            --更改表空间 index_space 的拥有者
            ALTER TABLESPACE index_space OWNER TO mary;


            04  
            移动表空间

            可将原磁盘空间目录的下文件移动新的目录下,但移动过程中会对整个移动对象进行锁定,所有操作都无法进行,包括 select。

            4.1 语法
              --移动数据库表空间
              ALTER DATABASE name SET TABLESPACE tablespace_name;
              --移动表表空间
              ALTER TABLE name SET TABLESPACE tablespace_name;
              --移动索引表空间
              ALTER INDEX name SET TABLESPACE tablespace_name;

              4.2 示例
                --查询表 user_info 所在表空间
                SELECT A.RELNAME,B.SPCNAME FROM PG_CLASS A, PG_TABLESPACE B
                WHERE (CASE A.RELTABLESPACE WHEN 0 THEN
                (SELECT OID FROM PG_TABLESPACE WHERE SPCNAME = 'pg_default')
                ELSE A.RELTABLESPACE END ) = B.OID
                AND A.RELNAME = 'user_info' ;




                --移动表 user_info 至新表空间 exam
                ALTER TABLE user_info SET TABLESPACE exam;




                05  
                删除表空间

                5.1 语法
                  DROP TABLESPACE [ IF EXISTS ] name

                  参数说明:
                  • IF EXISTS:如果该表空间不存在则不要抛出一个错误,而是发出一个提示。
                  • name:一个表空间的名称。

                  5.2 示例
                    --将表空间 fast_raid
                    DROP TABLESPACE fast_raid;


                    原文作者:CSDN博主[脑子进水养啥鱼?]
                    原文链接:
                    https://xiaosonggong.blog.csdn.net/article/details/131687527


                    END

                    为促进团队内外的沟通联系,我们Klustron团队的bbs论坛开始上线,欢迎各位同学使用!链接:https://forum.klustron.com/,或者点击文末“阅读原文”,即可跳转

                    论坛目前是测试版,可能还存在不稳定的现象,欢迎各位老师、朋友共享信息,如果遇到问题还请谅解。

                    欢迎大家下载和安装Klustron数据库集群,并免费使用(无需注册码)

                    Klustron 完整软件包下载:
                    http://downloads.klustron.com/

                    如需购买请邮箱联系sales_vip@klustron.com,有相关问题欢迎添加下方小助手微信联系🌹

                    产品文档

                    Klustron 快速入门:
                    https://doc.klustron.com/zh/Klustron_Instruction_Manual.html

                    Klustron 快速体验指南:
                    https://doc.klustron.com/zh/Klustron_Quickly_Guide.html

                    Klustron 功能体验范例:
                    https://doc.klustron.com/zh/Klustron-function-experience-example.html

                    Klustron 产品使用和测评指南:
                    https://doc.klustron.com/zh/product-usage-and-evaluation-guidelines.html


                     点击👆上方,关注获取源代码及技术信息~







                    文章转载自KunlunBase 昆仑数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论