前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战演练:PostgreSQL在线扩容

实战演练:PostgreSQL在线扩容

作者头像
数据和云
发布2020-06-17 11:08:42
1.4K0
发布2020-06-17 11:08:42
举报
文章被收录于专栏:数据和云数据和云

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

1. 查看表空间

代码语言:javascript
复制
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用户来进行演示

代码语言:javascript
复制
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. 新建表空间

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

代码语言:javascript
复制
$ mkdir tblspace_new

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

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

代码语言:javascript
复制
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

先恢复下上面的配置

代码语言:javascript
复制
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再重新连接

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 查看表空间
  • 2. 创建演示数据库和用户
  • 3. 新建表空间
  • 4. 数据库app使用新表空间作为默认表空间
  • 5. 修改用户app默认表空间为tbl_app
  • 6. 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档