更新时间:2026-08-06 GMT+08:00
分享

表空间管理

操作场景

RDS for PostgreSQL提供基于root用户的PostgreSQL表空间管理方案。支持以下两种表空间的管理方法。

系统预置表空间

  1. root用户连接数据库,并创建表空间。为了考虑数据库的性能,用户最多可创建100个表空间。

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --dbname=<DB_NAME> --username=root -c "select control_tablespace ('create', '<TABLESPACE_NAME>');"
    表1 参数说明

    参数

    说明

    RDS_ADDRESS

    RDS实例的IP地址。

    DB_PORT

    RDS数据库实例的端口。

    DB_NAME

    数据库名称。

    TABLESPACE_NAME

    表空间名称。

    示例如下,登录至数据库“my_db”并创建表空间“tbspc1”

    # psql --host=192.168.6.141 --port=5432 --dbname=my_db --username=root -c "select control_tablespace('create', 'tbspc1');"

    根据命令提示输入root用户密码。

    Password for user root:
              control_tablespace          
    ------------------------------    
    create tablespace tbspc1 successfully.   
    (1 row)

    如果创建不成功,详细信息请查看该实例错误日志

  2. root用户连接数据库,并授权表空间使用权限给指定用户。

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --dbname=<DB_NAME> --username=root -c "select control_tablespace ('alter', '<TABLESPACE_NAME>', '<USER_NAME>');"
    表2 参数说明

    参数

    说明

    RDS_ADDRESS

    RDS实例的IP地址。

    DB_PORT

    RDS数据库实例的端口。

    DB_NAME

    数据库名称。

    TABLESPACE_NAME

    表空间名称。

    USER_NAME

    表空间的用户名。

    示例如下,登录至数据库“my_db”并授权表空间“tbspc1”的使用权限。

    # psql --host=192.168.6.141 --port=5432 --dbname=my_db --username=root -c "select control_tablespace('alter', 'tbspc1', 'user1');"

    根据提示输入root用户密码。

    Password for user root:
             control_tablespace         
    ----------------------------    
    alter tablespace tbspc1 successfully.   
    (1 row)

    如果授权不成功,详细信息请查看该实例错误日志

  3. root用户连接数据库,并删除表空间。删除表空间之前请确认该表空间已为空。

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --username=root --dbname=<DB_NAME> -c "select control_tablespace('drop', '<TABLESPACE _NAME>');"
    表3 参数说明

    参数

    说明

    RDS_ADDRESS

    RDS实例的IP地址。

    DB_PORT

    RDS数据库实例的端口。

    DB_NAME

    数据库名称。

    TABLESPACE_NAME

    表空间名称。

    示例如下:

    # psql --host=192.168.6.141 --port=8635 --dbname=my_db --username=root -c "select control_tablespace('drop', 'tbspc1');"

    根据提示输入root用户密码。

    Password for user root:
             control_tablespace         
    ----------------------------    
    drop tablespace tbspc1 successfully.   
    (1 row)

    如果删除不成功,详细信息请查看该实例错误日志

用户自定义表空间

RDS for PostgreSQL将目录“/var/lib/pgsql/selfspc/tbls”作为root用户自定义表空间的基目录,用户可以基于这个目录使用标准SQL语句管理表空间。

  1. root用户连接数据库。

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT> --dbname=<DB_NAME> --username=root
    表4 参数说明

    参数

    说明

    RDS_ADDRESS

    RDS实例的IP地址。

    DB_PORT

    RDS数据库实例的端口。

    DB_NAME

    数据库名称。

    示例如下,登录至数据库“my_db”,并根据提示输入root用户密码。

    # psql --host=192.168.6.141 --port=5432 --dbname=my_db

  2. 创建表空间。

    CREATE TABLESPACE <TABLESPACE _NAME> LOCATION '<TABLESPACE_LOCATION>'; 
    表5 参数说明

    参数

    说明

    TABLESPACE _NAME

    表空间名称。

    TABLESPACE_LOCATION

    表空间的存储路径。该参数值必须以/开头,仅支持数字、字母以及特殊字符. / - _

    实际的表空间路径为与基目录拼接后的路径。

    示例如下,创建表空间“user_tbspc”,路径为/var/lib/pgsql/selfspc/tbls/data。

    CREATE TABLESPACE user_tbspc LOCATION '/data'; 

  3. 查看表空间。

    SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace; 

  4. 使用表空间。

    CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(50)
    ) TABLESPACE user_tbspc;

  5. 删除表空间。

    DROP TABLESPACE if exists user_tbspc;

相关文档