zoukankan      html  css  js  c++  java
  • PG-表空间管理

    2.5 表空间

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

    表空间也是数据库集簇的一部分 并且不能被视作数据文件的一个自治集合。 它们依赖于包含在主数据目录中的元数据,并且因此不能被附加到一个不同的数据库集簇或者单独备份。

    当初始化数据库集簇($PGDATA)时,会自动创建两个表空间。pg_global表空间被用于共享系统目录。pg_default表空间是template1template0数据库的默认表空间。$PGDATA/pg_tblspc目录包含指向集簇中定义的每个非内建表空间的符号连接。

    表空间符号链接

    2.5.1 创建表空间

    表空间创建步骤
    • 在服务器上创建文件系统目录
    • 修改目录权限
    • 数据库上创建表空间
    -- 格式
    CREATE TABLESPACE fastspace LOCATION '/ssd1/postgresql/data';
    

    位置必须是一个已有的空目录,并且属于PostgreSQL操作系统用户

    # 1. FS上创建目录
    mkdir -p /ups/data/pgdata/devtbs
    chown postgres:postgres /ups/data/pgdata/devtbs
    chmod 700 /ups/data/pgdata/devtbs
    
    # 2. psql上创建表空间
    create tablespace "devtbs" location '/ups/data/pgdata/devtbs';
    
    # 3. create dbs
    create database "devdb" with owner = postgres encoding = 'UTF8' tablespace = devtbs;
    
    # 4. show info
    select oid, datname from pg_database;
    

    2.5.2 临时表空间

    temp_tablespaces参数决定临时表和索引的位置,以及用于大数据集排序、聚合等目的的临时文件的位置。 这可以是一个表空间名的列表,使用逗号隔开。因此,与临时对象有关的负载可以散布在多个表空间上。每次要创建一个临时对象时,将从列表中随机取一个成员来存放它。

    创建表空间目录路径
    mkdir -p /ups/data/pgdata/12/pg_tbs_tmp
    chown postgres:postgres /ups/data/pgdata/12/pg_tbs_tmp
    chmod 700 /ups/data/pgdata/12/pg_tbs_tmp
    
    创建表空间
    -- 创建表空间
    CREATE TABLESPACE tbs_tmp LOCATION '/ups/data/pgdata/12/pg_tbs_tmp';
    
    设置临时表空间
    在session 级别设置临时表空间
    set session temp_tablespaces='tbs_tmp';
    
    修改配置文件参数 temp_tablespaces (永久)
    vi $PGDATA/postgresql.conf
    #temp_tablespaces = ''			# a list of tablespace names, '' uses
    
    
    pg_ctl reload
    
    查看临时表空间
    show temp_tablespaces
    

    2.5.3 删除表空间

    语法
    10:40:01 [local]:5432 postgres@postgres=# h DROP TABLESPACE
    Command:     DROP TABLESPACE
    Description: remove a tablespace
    Syntax:
    DROP TABLESPACE [ IF EXISTS ] name
    
    URL: https://www.postgresql.org/docs/12/sql-droptablespace.html
    
    
    示例
    drop tablespace if exists tbs_test;
    

    查看表空间信息

    元命令 db[+]
    10:19:58 [local]:5432 postgres@postgres=# db+
                                               List of tablespaces
        Name    |  Owner   |          Location          | Access privileges | Options |  Size  | Description 
    ------------+----------+----------------------------+-------------------+---------+--------+-------------
     devtbs     | postgres | /ups/data/pgdata/12/pg_usr |                   |         | 53 MB  | 
     pg_default | postgres |                            |                   |         | 46 MB  | 
     pg_global  | postgres |                            |                   |         | 863 kB | 
    (3 rows)
    
    
    SQL 语句
    select * from pg_catalog.pg_tablespace;
    

    创建数据库对象到指定表空间

    -- 1.1 
    CREATE TABLE foo(i int) TABLESPACE sp1;
    
    -- 1.2 指定默认表空间
    SET default_tablespace = sp1;
    CREATE TABLE foo(i int);
    
  • 相关阅读:
    LeetCode 297. Serialize and Deserialize Binary Tree 二叉树的序列化与反序列化(C++/Java)
    LeetCode 381. Insert Delete GetRandom O(1)
    LeetCode 380. Insert Delete GetRandom O(1) 常数时间插入、删除和获取随机元素(C++/Java)
    LeetCode 673. Number of Longest Increasing Subsequence 最长递增子序列的个数 (C++/Java)
    LeetCode 675. Cut Off Trees for Golf Event 为高尔夫比赛砍树 (C++/Java)
    LeetCode 460. LFU Cache LFU缓存 (C++/Java)
    LeetCode 451. Sort Characters By Frequency 根据字符出现频率排序 (C++/Java)
    LeetCode 332. Reconstruct Itinerary重新安排行程 (C++/Java)
    LeetCode 295. Find Median from Data Stream数据流的中位数 (C++/Java)
    Codeforces Round #318 (Div. 2) A Bear and Elections (优先队列模拟,水题)
  • 原文地址:https://www.cnblogs.com/binliubiao/p/14415183.html
Copyright © 2011-2022 走看看