作者简介
谭峰 网名francs,三墩IT人,PostgreSQL中文社区委员,《PostgreSQL实战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一,致力于PostgreSQL技术分享,博客 https://postgres.fun。
背景
发行说明
环境规划
环境准备
部署mydb数据库
--建用户
CREATE ROLE pguser LOGIN ENCRYPTED PASSWORD 'pguser' nosuperuser noinherit nocreatedb nocreaterole ;
--创建表空间(如果有 Standby ,也需要创建目录)
mkdir -p pgdata/pg13/pg_tbs/tbs_mydb
--创建数据库
CREATE DATABASE mydb
WITH OWNER = postgres
TEMPLATE = template0
ENCODING = 'UTF8'
TABLESPACE = tbs_mydb;
--赋权
grant all on database mydb to pguser with grant option;
grant all on tablespace tbs_mydb to pguser;
\c mydb pguser
create schema pguser;
创建分区表
--创建父表
CREATE TABLE tbl_log (
id serial,
user_id int4,
create_time timestamp(0) without time zone
) PARTITION BY RANGE(create_time);
--创建子表
CREATE TABLE tbl_log_his PARTITION OF tbl_log FOR VALUES FROM (minvalue) TO ('2020-01-01');
CREATE TABLE tbl_log_202001 PARTITION OF tbl_log FOR VALUES FROM ('2020-01-01') TO ('2020-02-01');
CREATE TABLE tbl_log_202002 PARTITION OF tbl_log FOR VALUES FROM ('2020-02-01') TO ('2020-03-01');
CREATE TABLE tbl_log_202003 PARTITION OF tbl_log FOR VALUES FROM ('2020-03-01') TO ('2020-04-01');
CREATE TABLE tbl_log_202004 PARTITION OF tbl_log FOR VALUES FROM ('2020-04-01') TO ('2020-05-01');
CREATE TABLE tbl_log_202005 PARTITION OF tbl_log FOR VALUES FROM ('2020-05-01') TO ('2020-06-01');
CREATE TABLE tbl_log_202006 PARTITION OF tbl_log FOR VALUES FROM ('2020-06-01') TO ('2020-07-01');
CREATE TABLE tbl_log_202007 PARTITION OF tbl_log FOR VALUES FROM ('2020-07-01') TO ('2020-08-01');
--创建索引
CREATE INDEX idx_tbl_log_ctime ON tbl_log USING BTREE (create_time);
部署逻辑复制
--创建复制用户
CREATE USER repuser
REPLICATION
LOGIN
CONNECTION LIMIT 10
ENCRYPTED PASSWORD 'rep123us345er';
--创建发布者
mydb=> CREATE PUBLICATION pub1 FOR TABLE tbl_log;
CREATE PUBLICATION
--给repuser用户赋权
mydb=> GRANT CONNECT ON DATABASE mydb TO repuser;
GRANT
mydb=> GRANT USAGE ON SCHEMA pguser TO repuser;
GRANT
mydb=> GRANT SELECT ON ALL TABLES IN SCHEMA pguser TO repuser;
GRANT
mydb=# CREATE SUBSCRIPTION sub1 CONNECTION 'host=192.168.2.11 port=1922 dbname=mydb user=repuser' PUBLICATION pub1;
NOTICE: created replication slot "sub1" on publisher
CREATE SUBSCRIPTION
数据验证
INSERT INTO tbl_log(user_id,create_time)
SELECT round(100000000*random()),generate_series('2019-10-01'::date, '2020-06-20'::date, '1 day');
psql (13beta1)
Type "help" for help.
mydb=> SELECT count(*) FROM tbl_log;
count
-------
264
(1 row)
mydb=> SELECT count(*) FROM tbl_log_202001;
count
-------
31
(1 row)
mydb=> SELECT count(*) FROM tbl_log_his;
count
-------
92
(1 row)
[pg13@ydtf03 ~]$ psql mydb pguser -p 1924
psql (13beta1)
Type "help" for help.
mydb=> SELECT count(*) FROM tbl_log;
count
-------
264
(1 row)
mydb=> SELECT count(*) FROM tbl_log_202001;
count
-------
31
(1 row)
mydb=> SELECT count(*) FROM tbl_log_his;
count
-------
92
(1 row)
总结

● 扫码入钉钉群,每周免费看PG技术直播 ●
文章转载自PostgreSQL中文社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。