开源 PostgreSQL 支持两种方式的外部插件,一种是 hook 机制插件,另一种是 C 函数扩展插件。在网上可以找到很多有用的第三方插件,也可以自定义开发插件。 PostgreSQL 数据库自身共也提供了 50 多个额外的模块插件,在 PostgreSQL 源码 contrib 子目录中找到找到他们。自 PostgreSQL v9 开始,有 40 多个模块缺省编译 contrib 模块时就会包含进去,还有几个模块编译时需要特别指定。通常因为开源 PostgreSQL 官方网站提供了包括 K1 Power Linux pcc64le 在内的多种平台的二进制软件包下载,我们可以直接下载和使用它们。但官网提供的软件普遍使用的编译器版本偏老,编译优化不够。使用 PostgreSQL 时经常会下载指定版本源码自己编译。前阵为一个用户优化 PostgreSQL 时刚好他们也用到了 uuid 插件,本文就以uuid 插件为例:
在 Makefile 模板中可以看到需要编译时设定with_uuid 选项才可以:
编译步骤,以 Redhat 8 for ppc64le 上编译 PostgreSQL v13.2 为例:
\# yum install advance-toolchain-at11.0
\# export PATH=/opt/at11.0/bin:$PATH
\# type gcc
gcc is /opt/at11.0/bin/gcc
\# gcc --version
gcc (GCC) 9.2.1 20190813 (Advance-Toolchain-at11 .0) [revision 274392]
\# yum -y install jemalloc jemalloc-devel cmake3 make bison zlib-devel \
bzip2-devel bzip2 libevent libevent-devel libcurl-devel apr-devel \
libxslt-devel libxml2-devel openssl-devel pam-devel krb5-devel perl perl-devel \
flex openldap-devel bison python3 python3-devel readline-devel ncurses-devel \
lz4 lz4-devel clang clang-devel libicu libicu-devel libevent-devel \
tcl tcl-devel libaio-devel libtirpc-develuuid libuuid libuuid-devel uuid-devel
下面以下载 postgresql-13.2.tar.gz 并 编译免安装的二进制软件为例:
\# tar zxvf postgresql-13.2.tar.gz
\# cd postgresql-13.2
\# CC=gcc \
CXX=g++ \
CPP=cpp \
CFLAGS=" -O3 -mcpu=native -mtune=native -mcmodel=large" \
CXXFLAGS="-O3 -mcpu=native -mtune=native -mcmodel=large" \
CPPFLAGS="-O3 -mcpu=native -mtune=native -mcmodel=large" \
LDFLAGS='-ljemalloc ' \
./configure --prefix=/opt/postgres_at/13.1 \
--with-blocksize=8 --with-segsize=1 --with-wal-blocksize=8 \
--with-openssl --with-uuid=ossp --with-libxml --with-libxslt \
--with-perl=yes --with-python=yes --with-tcl=yes --with-gssapi=yes \
2>&1 |tee config.log
\# make -j32 && make install
\# cd contrib && make && make install
\# cd /opt/pg && tar zcf postgresql13-server-13.2-1PGDG.el7a.ppc64le.at11gcc.tar.gz ./13.2
注:如果编译 RPM 包,则先下载并安装对应版本 src.rpm ,需要注意 postgresql-13.spec 文件中:缺省它写的是 power8 ,建议替换成 native ,编译器版本替换成编译时的实际版本,然后执行 rpmbuild 进行编译,并可以通过 --define 选项传递自定义参数。
创建 UUID 插件扩展并验证:
$ export PATH=/opt/at11.0/bin:/opt/pg/13.1/bin:$PATH
$ pg_ctl initdb -D /data/pgdata/testdb
$ pg_ctl -D /data/pgdata/testdb start -s -w
$ psql -U postgres -d postgres
psql (13.1)
Type "help" for help.
postgres=# create extension "uuid-ossp" ; CREATE EXTENSION
postgres=# select uuid_generate_v4();
uuid_generate_v4
a0f9b38b-b64f-4cc1-a5bc-a75b49ba02fb
(1 row)
postgres=# select uuid_generate_v1mc();
uuid_generate_v1mc
6746c81e-0d43-11ec-80b5-373590327f8c
(1 row)
postgres=# exit;
UUID函数说明
函数名称 | 函数说明 |
uuid_generate_v1() | 生成版本 1 UUID。使用到计算机的 MAC 地址和时间戳。此类 UUID 会显示创建标识符的计算机的身份及其创建识别码的时间,这可能使其不适合某些安全敏感的应用程序。 |
uuid_generate_v1mc() | 生成版本 1 UUID,但使用随机多广播 MAC 地址,而不是计算机的真实 MAC 地址。 |
uuid_generate_v3(namespace uuid, name text) | 使用指定的输入名称在给定名称空间中生成版本 3 UUID。命名空间应是下文函数生成的特殊常数之一。(理论上可能是任何UID。该名称是选定名称空间中的标识符。uuid_ns_*() |
uuid_generate_v4() | 生成一个版本 4 UUID,它完全来自随机数。 |
uuid_generate_v5(namespace uuid, name text) | 生成一个版本 5 UUID,它的工作原理与版本 3 UUID 类似,但 SHA-1 用作哈希方法除外。版本 5 应优先于版本 3,因为 SHA-1 被认为比 MD5 更安全。 |
K1 Power Linux 上优化编译的 PostgreSQL 软件将陆续发布在 https://github.com/powerfans/PostgreSQL_binaries ,敬请关注。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论