专栏首页数据和云实战演练:PostgreSQL在线扩容

实战演练:PostgreSQL在线扩容

墨墨导读:最近被问到PG在线扩容的问题,本文整理了整个过程,之前写过一篇文章,供大家参考:《PosgreSQL三种表空间使用方式》https://www.modb.pro/db/14119。

1. 查看表空间

postgres=# \db+
                                  List of tablespaces
    Name    |  Owner   | Location | Access privileges | Options |  Size   | Description 
------------+----------+----------+-------------------+---------+---------+-------------
 pg_default | postgres |          |                   |         | 1088 MB | 
 pg_global  | postgres |          |                   |         | 2167 kB | 
(2 rows)

可以看到这里没有自定义表空间,默认使用pg_default 表空间

2. 创建演示数据库和用户

使用新的数据库app,并且owner为app用户来进行演示

postgres=# create user app password'XXX';
CREATE ROLE
postgres=# create database app owner app;
CREATE DATABASE
postgres=# \c app app
You are now connected to database "app" as user "app".
app=> create schema app authorization app;
CREATE SCHEMA
app=> create table public.t1(id int);
CREATE TABLE
app=> create table app.t2(id int);
CREATE TABLE

3. 新建表空间

创建表空间需要超级用户权限

$ mkdir tblspace_new

app=# CREATE TABLESPACE tbl_app OWNER app LOCATION '/home/postgres/tblspace_new';
CREATE TABLESPACE

4. 数据库app使用新表空间作为默认表空间

app=# \c app app
You are now connected to database "app" as user "app".
app=> alter database app set default_tablespace to tbl_app;

退出psql再重新连接
app=> create table public.t3(id int);
CREATE TABLE
app=> create table app.t4(id int);
CREATE TABLE
app=> select pg_relation_filepath('t3');
              pg_relation_filepath              
------------------------------------------------
 pg_tblspc/356916/PG_12_201909212/356883/356935
(1 row)

app=> select pg_relation_filepath('app.t4');
              pg_relation_filepath              
------------------------------------------------
 pg_tblspc/356916/PG_12_201909212/356883/356938
(1 row)

app=> select oid,spcname from pg_tablespace ;
  oid   |  spcname   
--------+------------
   1663 | pg_default
   1664 | pg_global
 356916 | tbl_app
(3 rows)

可以看到在app数据库下新建的表默认变到tbl_app表空间下,即oid为356916。

5. 修改用户app默认表空间为tbl_app

先恢复下上面的配置

drop table public.t3;
drop table app.t4;
alter database app set default_tablespace to default;

app=# \c app app
app=> alter user app set default_tablespace to tbl_app;

退出psql再重新连接

app=> create table public.t5(id int);
CREATE TABLE
app=> create table app.t6(id int);
CREATE TABLE
app=> select pg_relation_filepath('t5');
              pg_relation_filepath              
------------------------------------------------
 pg_tblspc/356916/PG_12_201909212/356883/356959
(1 row)

app=> select pg_relation_filepath('app.t6');
              pg_relation_filepath              
------------------------------------------------
 pg_tblspc/356916/PG_12_201909212/356883/356962
(1 row)

可以看到用户app新建的表默认变到tbl_app表空间下,其他用户不受影响。

6. 总结

  • 如果要迁移数据表的表空间,会锁表,要注意对业务的影响。
  • 新建表修改database级别或者user级别(一般还是database级别)的默认表空间,只需配置一次,原有的数据表存储不改变,这种方式是推荐的。

墨天轮原文链接:https://www.modb.pro/db/26082

本文分享自微信公众号 - 数据和云(OraNews),作者:彭冲

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DoD 与开源软件

    DoD指 The Department of Defense - 国防部,这是Oracle最近发布的一个白皮书,指出开源软件不可能在军事领域取得信任。 我们可以...

    数据和云
  • 数据为桥迈向智能,渤海财险数据架构智能化演进

    Gartner的报告宣称,到2020年,将近50%的企业将会在业务和IT运维方面采用AIOps。尽管AIOps对于广大运维人员来说,仍然是一个新词,但在各企业已...

    数据和云
  • ACOUG南阳理工学院技术分享

    2014年5月9日,ACOUG的校园行活动来到南阳理工学院,这是一个听闻已久的院校,多位南阳理工的同学在公司实习,各有特色,表现出众,也正是因为这些同学的介绍和...

    数据和云
  • 慕课网Flask高级编程实战-4.flask核心机制

    在 3.8节我们通过db.create_all(app=app)的方式解决了working outside application context的错误,下面我...

    Meet相识
  • 109个提高App下载量的营销策略(上)

    引言:本文介绍了如何提高APP下载量的109个适用的营销策略中的前36个策略,本系列全长共109个策略。

    iCDO互联网数据官
  • App出海又遇困局,乘风破浪的互联网企业何时上岸

    App Annie统计显示,2020年6月全球热门应用,TikTok(抖音海外版)继续霸榜,无论是下载量还是收入依旧稳拿第一。今年受到新冠疫情的影响,在一二季度...

    APICloud
  • 网站搭建-django-学习成绩管理-01-新建app

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia
  • mig IP用户读写时序

    FPGA开源工作室将通过五篇文章来给大家讲解xilinx FPGA 使用mig IP对DDR3的读写控制,旨在让大家更快的学习和应用DDR3。

    FPGA开源工作室
  • flask flask-script自定义指令(flask 50)

    from flask import Flask,render_template from views.admin import admin_bp from ...

    用户5760343
  • 怎样才能做一款好的App,即做app时最需要注意的六个因素

    移动互联网时代,app已经成为了我们生活中不可或缺的一部分了。根据当前情况来看,app在未来几年内,至少两年内,还将会有新一波的火爆增长时期。尤其是我们中国市场...

    非著名程序员

扫码关注云+社区

领取腾讯云代金券