os: centos 7.4
db: postgresql 11.6

之前分区组件一直使用的 pg_pathman,今天在看 citus 的文档时发现还有个 pg_partman 组件

版本

# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
#
# yum list installed |grep -i postgresql
postgresql11.x86_64                11.6-2PGDG.rhel7                    @pgdg11
postgresql11-contrib.x86_64        11.6-2PGDG.rhel7                    @pgdg11
postgresql11-debuginfo.x86_64      11.6-2PGDG.rhel7                    @pgdg11
postgresql11-devel.x86_64          11.6-2PGDG.rhel7                    @pgdg11
postgresql11-docs.x86_64           11.6-2PGDG.rhel7                    @pgdg11
postgresql11-libs.x86_64           11.6-2PGDG.rhel7                    @pgdg11
postgresql11-llvmjit.x86_64        11.6-2PGDG.rhel7                    @pgdg11
postgresql11-odbc.x86_64           12.00.0000-1PGDG.rhel7              @pgdg11
postgresql11-plperl.x86_64         11.6-2PGDG.rhel7                    @pgdg11
postgresql11-plpython.x86_64       11.6-2PGDG.rhel7                    @pgdg11
postgresql11-pltcl.x86_64          11.6-2PGDG.rhel7                    @pgdg11
postgresql11-server.x86_64         11.6-2PGDG.rhel7                    @pgdg11
postgresql11-tcl.x86_64            2.4.0-2.rhel7.1                     @pgdg11
postgresql11-test.x86_64           11.6-2PGDG.rhel7                    @pgdg11
#
# su - postgres
Last login: Mon Dec 16 20:13:53 CST 2019 on pts/0
-bash-4.2$ psql
psql (11.6)
Type "help" for help.postgres=# select version();version
---------------------------------------------------------------------------------------------------------PostgreSQL 11.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)postgres=#

下载、安装、编译

使用的是 yum 方式安装的 postgresql,所以使用 root 用户安装(或者 postgres 用户使用 sudo)

# cd /var/lib/pgsql/
# wget https://github.com/pgpartman/pg_partman/archive/v4.2.2.tar.gz
# tar -zxvf ./v4.2.2.tar.gz
# ls -l
total 2552
drwxr-xr-x  8 root root     211 Oct 16 21:43 pg_partman-4.2.2# cd pg_partman-4.2.2/
# make
/bin/sh: pg_config: command not found
/bin/sh: pg_config: command not found
make: pg_config: Command not found
make: *** No rule to make target `install'.  Stop.

pg_config 不在 PATH下

# export PATH=/usr/pgsql-11/bin:${PATH}
# which pg_config
/usr/pgsql-11/bin/pg_config# make/opt/rh/llvm-toolset-7/root/usr/bin/clang -Wno-ignored-attributes -fno-strict-aliasing -fwrapv -O2  -I. -I./ -I/usr/pgsql-11/include/server -I/usr/pgsql-11/include/internal  -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include -flto=thin -emit-llvm -c -o src/pg_partman_bgw.bc src/pg_partman_bgw.c
make: /opt/rh/llvm-toolset-7/root/usr/bin/clang: Command not found
make: *** [src/pg_partman_bgw.bc] Error 127

报错 /opt/rh/llvm-toolset-7/root/usr/bin/clang: Command not found 需要按照如下方式解决

<</opt/rh/llvm-toolset-7/root/usr/bin/clang: Command not found>>

再次编译安装

# makegcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -I. -I./ -I/usr/pgsql-11/include/server -I/usr/pgsql-11/include/internal  -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  -c -o src/pg_partman_bgw.o src/pg_partman_bgw.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -L/usr/pgsql-11/lib -Wl,--as-needed -L/usr/lib64/llvm5.0/lib  -L/usr/lib64 -Wl,--as-needed -Wl,-rpath,'/usr/pgsql-11/lib',--enable-new-dtags  -shared -o src/pg_partman_bgw.so src/pg_partman_bgw.o
/opt/rh/llvm-toolset-7/root/usr/bin/clang -Wno-ignored-attributes -fno-strict-aliasing -fwrapv -O2  -I. -I./ -I/usr/pgsql-11/include/server -I/usr/pgsql-11/include/internal  -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include -flto=thin -emit-llvm -c -o src/pg_partman_bgw.bc src/pg_partman_bgw.c# make install/bin/mkdir -p '/usr/pgsql-11/share/extension'
/bin/mkdir -p '/usr/pgsql-11/share/extension'
/bin/mkdir -p '/usr/pgsql-11/lib'
/bin/mkdir -p '/usr/pgsql-11/doc/extension'
/bin/mkdir -p '/usr/pgsql-11/bin'
/bin/install -c -m 644 .//pg_partman.control '/usr/pgsql-11/share/extension/'
/bin/install -c -m 644 .//updates/pg_partman--2.5.0--2.5.1.sql .//updates/pg_partman--2.3.2--2.3.3.sql .//updates/pg_partman--2.6.2--2.6.3.sql .//updates/pg_partman--4.1.0--4.2.0.sql .//updates/pg_partman--2.2.1--2.2.2.sql .//updates/pg_partman--1.8.7--2.0.0.sql .//updates/pg_partman--2.2.3--2.3.0.sql .//updates/pg_partman--1.8.0--1.8.1.sql .//updates/pg_partman--2.0.0--2.1.0.sql .//updates/pg_partman--2.2.0--2.2.1.sql .//updates/pg_partman--1.3.0--1.4.0.sql .//updates/pg_partman--2.3.3--2.3.4.sql .//updates/pg_partman--4.2.1--4.2.2.sql .//updates/pg_partman--1.8.2--1.8.3.sql .//updates/pg_partman--1.8.1--1.8.2.sql .//updates/pg_partman--1.7.0--1.7.1.sql .//updates/pg_partman--1.1.0--1.2.0.sql .//updates/pg_partman--2.5.1--2.6.0.sql .//updates/pg_partman--0.1.2--0.2.0.sql .//updates/pg_partman--2.3.0--2.3.1.sql .//updates/pg_partman--3.0.2--3.1.0.sql .//updates/pg_partman--0.3.1--0.3.2.sql .//updates/pg_partman--0.2.0--0.3.0.sql .//updates/pg_partman--3.2.0--3.2.1.sql .//updates/pg_partman--1.7.1--1.7.2.sql .//updates/pg_partman--2.3.4--2.4.0.sql .//updates/pg_partman--0.3.0--0.3.1.sql .//updates/pg_partman--4.2.0--4.2.1.sql .//updates/pg_partman--1.4.5--1.5.0.sql .//updates/pg_partman--3.0.1--3.0.2.sql .//updates/pg_partman--1.8.8--2.0.0.sql .//updates/pg_partman--1.5.0--1.5.1.sql .//updates/pg_partman--3.1.1--3.1.2.sql .//updates/pg_partman--1.2.0--1.3.0.sql .//updates/pg_partman--1.4.3--1.4.4.sql .//updates/pg_partman--3.0.0--3.0.1.sql .//updates/pg_partman--1.8.6--1.8.7.sql .//updates/pg_partman--3.1.0--3.1.1.sql .//updates/pg_partman--2.4.0--2.4.1.sql .//updates/pg_partman--1.7.2--1.8.0.sql .//updates/pg_partman--3.1.2--3.1.3.sql .//updates/pg_partman--0.4.1--0.4.2.sql .//updates/pg_partman--1.5.1--1.6.0.sql .//updates/pg_partman--2.6.4--3.0.0.sql .//updates/pg_partman--3.2.1--4.0.0.sql .//updates/pg_partman--2.3.1--2.3.2.sql .//updates/pg_partman--0.1.1--0.1.2.sql .//updates/pg_partman--0.4.0--0.4.1.sql .//updates/pg_partman--1.8.7--1.8.8.sql .//updates/pg_partman--2.6.3--2.6.4.sql .//updates/pg_partman--0.1.0--0.1.1.sql .//updates/pg_partman--1.0.0--1.1.0.sql .//updates/pg_partman--1.6.1--1.7.0.sql .//updates/pg_partman--1.4.4--1.4.5.sql .//updates/pg_partman--1.8.4--1.8.5.sql .//updates/pg_partman--2.4.1--2.5.0.sql .//updates/pg_partman--0.3.2--0.4.0.sql .//updates/pg_partman--2.1.0--2.2.0.sql .//updates/pg_partman--1.6.0--1.6.1.sql .//updates/pg_partman--1.4.1--1.4.2.sql .//updates/pg_partman--1.4.2--1.4.3.sql .//updates/pg_partman--4.0.0--4.1.0.sql .//updates/pg_partman--1.8.3--1.8.4.sql .//updates/pg_partman--3.1.3--3.2.0.sql .//updates/pg_partman--2.2.2--2.2.3.sql .//updates/pg_partman--1.4.0--1.4.1.sql .//updates/pg_partman--2.6.1--2.6.2.sql .//updates/pg_partman--0.4.2--1.0.0.sql .//updates/pg_partman--1.8.5--1.8.6.sql .//updates/pg_partman--2.6.0--2.6.1.sql .//sql/pg_partman--4.2.2.sql  '/usr/pgsql-11/share/extension/'
/bin/install -c -m 755  src/pg_partman_bgw.so '/usr/pgsql-11/lib/'
/bin/mkdir -p '/usr/pgsql-11/lib/bitcode/src/pg_partman_bgw'
/bin/mkdir -p '/usr/pgsql-11/lib/bitcode'/src/pg_partman_bgw/src/
/bin/install -c -m 644 src/pg_partman_bgw.bc '/usr/pgsql-11/lib/bitcode'/src/pg_partman_bgw/src/
cd '/usr/pgsql-11/lib/bitcode' && /usr/lib64/llvm5.0/bin/llvm-lto -thinlto -thinlto-action=thinlink -o src/pg_partman_bgw.index.bc src/pg_partman_bgw/src/pg_partman_bgw.bc
/bin/install -c -m 644 .//doc/migration_to_partman.md .//doc/pg_partman.md .//doc/pg_partman_howto.md '/usr/pgsql-11/doc/extension/'
/bin/install -c -m 755 .//bin/common/*.py '/usr/pgsql-11/bin/'

查看生成的文件

# ls -l /usr/pgsql-11/lib |grep -i pg_part
-rwxr-xr-x   1 root     root       59112 Dec 18 09:51 pg_partman_bgw.so# ls -l /usr/pgsql-11/share/extension/ |grep -i pg_part-rw-r--r--  1 root root 135485 Dec 18 09:51 pg_partman--4.0.0--4.1.0.sql
-rw-r--r--  1 root root 120577 Dec 18 09:51 pg_partman--4.1.0--4.2.0.sql
-rw-r--r--  1 root root  13967 Dec 18 09:51 pg_partman--4.2.0--4.2.1.sql
-rw-r--r--  1 root root   9194 Dec 18 09:51 pg_partman--4.2.1--4.2.2.sql
-rw-r--r--  1 root root 310105 Dec 18 09:51 pg_partman--4.2.2.sql
-rw-r--r--  1 root root    111 Dec 18 09:51 pg_partman.control

使用

# vi /var/lib/pgsql/11/data/postgresql.conf shared_preload_libraries = 'pg_partman_bgw' # systemctl restart postgresql-11.service
# su - postgres
$ psqlpostgres=# select * from pg_available_extensions where name like 'pg_part%';name    | default_version | installed_version |                       comment
------------+-----------------+-------------------+------------------------------------------------------pg_partman | 4.2.2           |                   | Extension to manage partitioned tables by time or ID
(1 row)postgres=# create extension pg_partman;
CREATE EXTENSION
postgres=# \dxList of installed extensionsName    | Version |   Schema   |                     Description
------------+---------+------------+------------------------------------------------------pg_partman | 4.2.2   | public     | Extension to manage partitioned tables by time or IDplpgsql    | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)postgres=# \dx+ pg_partmanObjects in extension "pg_partman"Object description
----------------------------------------------------------------------------------------------------------------------------function apply_cluster(text,text,text,text)function apply_constraints(text,text,boolean,bigint,boolean)function apply_foreign_keys(text,text,bigint,boolean)function apply_privileges(text,text,text,text,bigint)function apply_publications(text,text,text)function autovacuum_off(text,text,text,text)function autovacuum_reset(text,text,text,text)function check_automatic_maintenance_value(text)function check_control_type(text,text,text)function check_default(boolean)function check_epoch_type(text)function check_name_length(text,text,boolean)function check_partition_type(text)function check_subpartition_limits(text,text)function check_subpart_sameconfig(text)function create_function_id(text,bigint)function create_function_time(text,bigint)function create_parent(text,text,text,text,text[],integer,text,text,boolean,text,text,text[],boolean,text,boolean,boolean)function create_partition_id(text,bigint[],boolean,boolean)function create_partition_time(text,timestamp with time zone[],boolean,boolean)function create_sub_parent(text,text,text,text,text,text[],integer,text,boolean,text,text,boolean,boolean,boolean)function create_trigger(text)function drop_constraints(text,text,boolean)function drop_partition_column(text,text)function drop_partition_id(text,bigint,boolean,boolean,text)function drop_partition_time(text,interval,boolean,boolean,text)function inherit_template_properties(text,text,text)function partition_data_id(text,integer,bigint,numeric,text,boolean,text)function partition_data_proc(text,text,integer,integer,text,text,integer,integer,boolean)function partition_data_time(text,integer,interval,numeric,text,boolean,text)function reapply_constraints_proc(text,boolean,boolean,integer,boolean)function reapply_privileges(text)function run_maintenance_proc(integer,boolean,boolean,boolean)function run_maintenance(text,boolean,boolean,boolean)function show_partition_info(text,text,text)function show_partition_name(text,text)function show_partitions(text,text,boolean)function stop_sub_partition(text,boolean)function undo_partition_proc(text,text,integer,integer,text,boolean,integer,integer,boolean)function undo_partition(text,integer,text,boolean,numeric,text)table custom_time_partitionstable part_configtable part_config_subtype check_default_tableview table_privs
(45 rows)postgres=# select name,setting from pg_settings where name like 'pg_part%';name           | setting
-------------------------+----------pg_partman_bgw.analyze  | offpg_partman_bgw.dbname   | pg_partman_bgw.interval | 3600pg_partman_bgw.jobmon   | onpg_partman_bgw.role     | postgres
(5 rows)

具体使用仔细阅读 <<Example Guide On Setting Up Trigger-based Partitioning>>

发现是通过触发器来实现的,这是在 pgsql 10 之前的分区实现方式,效率较低。总之感觉没有 pg_pathman 好用。

If you’re using the Background Worker (BGW), set the pg_partman_bgw.interval value in postgresql.conf. This example sets it to run every 12 hrs (43200 seconds). See the doc/pg_partman.md file for more information on the BGW settings.

参考:
https://github.com/pgpartman/pg_partman
https://github.com/pgpartman/pg_partman/blob/master/doc/pg_partman.md
https://github.com/pgpartman/pg_partman/blob/master/doc/pg_partman_howto.md

pg_partman相关推荐

  1. 金仓数据库 KingbaseES 插件参考手册 pg_partman

    66. pg_partman 66.1. 插件pg_partman简介 66.1.1. 功能和发展 partman是pg的一个扩展,可帮助使用者更轻松地管理基于time或serialid的分区表.pa ...

  2. PostgreSQL中的大容量空间探索时间序列数据存储

    欧洲航天局科学数据中心(the European Space Agency Science Data Center,简称ESDC)利用TimescaleDB扩展切换到用PostgreSQL来存储他们的 ...

  3. PostgreSQL从继承到分区(三)

    2019独角兽企业重金招聘Python工程师标准>>> 三.Pg_partman 3.1 介绍 pg_partman是基于PostgreSQL分区开发的一个分区表管理工具,通过多个引 ...

  4. Postgresql-11 根据多字段创建分区表

    1.表分区的意义 随着系统的使用,业务表的数据会变得越来越庞大,当达到一定程度时,会严重影响系统性能,将表分区,可以很好的解决这个问题.分区表的优点包括: (1)大大提高查询性能:对表分区后,查询时会 ...

  5. 基础设施即代码(IAC),Zalando Postgres Operator 简介

    Postgres Operator 在由 Patroni 提供支持的 Kubernetes (K8s) 上提供易于运行的高可用性 PostgreSQL 集群.它仅通过 Postgres 清单 (CRD ...

  6. postgresql 表分区

    postgresql 表分区 背景 一个大表查询性能往往不高, 其原因在于数据加载 data load,扫描数据 table scans ,内存交换 memory swap 等等操作的时间成本会随着数 ...

  7. PostgreSQL 常用工具

    文章目录 管理/开发工具 备份与恢复 集群和复制 驱动和接口 PostgreSQL 衍生版 PostgreSQL 扩展插件 外部数据库 存储过程相关 管理/开发工具 pgAdmin4,基于 Web 的 ...

  8. PostgreSQL是世界上最好的数据库

    作者:柯克·罗伊巴尔 Kirk Roybal是PostgreSQL的狂热者,并定期为2ndQuadrant博客做贡献. 前言 首先声明,我不是标题党,刻意诱惑点击或夸大描述.我打算证明,无论有没有金钱 ...

  9. postgresql分库分表中间件开源实现方案

    PostgreSQL 分库分表的中间件开源实现方案有很多, 你可以根据自己的需要选择适合自己的方案. 下面是几种常见的方案: pgpool-II: 一个 PostgreSQL 透明数据库代理, 具有负 ...

最新文章

  1. 【Linux】一步一步学Linux——builtin命令(215)
  2. bzoj3895: 取石子(博弈论,记忆化搜索)
  3. jclouds_jclouds的命令行界面
  4. Unity 通过Unity Admob Plugin插件集成admob教程
  5. Hadoop--初识Hadoop
  6. JAVA高并发的三种实现
  7. python散点图数据怎么输入_python 散点图添加标签
  8. Android仿饿了么加减控件,小程序仿饿了么弹窗式购物车
  9. 【云原生】Kubernetes编排工具精讲
  10. python 将图片转换成像素画_python画像素图
  11. xp系统禁用wmi服务器,windows xp系统启用WMI服务的方法
  12. python爬虫爬取雪球网_Python爬虫:Selenium+ BeautifulSoup 爬取JS渲染的动态内容(雪球网新闻)...
  13. (一)C++游戏开发-本地存储-介绍
  14. 云计算产品经理入门(一)
  15. 教大家看懂安卓build.prop文件详情
  16. 业务应用数据库压力过大解决方案
  17. GDP,CPI,PPI,PMI,GNP 是什么
  18. 神经网络激活函数及其Katex公式代码模板合集
  19. 大学生用什么软件学c语言,当代大学生必须的几款APP
  20. Python字符串连接

热门文章

  1. 注意力机制Effective Approaches to Attention-based Neural Machine Translation
  2. CWnd::WindowProc的理解
  3. steamvr2.0 vr模式下,多相机共存
  4. 【华人学者风采】刘小平 中山大学
  5. 有哪些靠谱的淘宝代运营公司?
  6. pubmedy安装不聊了_Pubmedy:显示影响因子+引用数、Sci-hub全文下载的浏览器扩展...
  7. LED亮5秒灭5秒C语言程序代码,单片机【木仓示申吧】_百度贴吧
  8. php 读doc_PHP读取DOC 文件
  9. 世界上最成功的 10 位 Logo 设计师
  10. 微众银行马智涛:解放数据生产力,以金融科技助力数字经济发展|数字思考者50人...