1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

PG全局临时表插件的使用

背景

PostgreSQL目前12版本只支持本地临时表不支持全局临时表特性,会话退出后临时表定义和数据被删除,在我们PG迁移之后业务需要用到全局临时表,为了完成这个需求,我们是采用PG的一个全局临时表插件pgtt-2.1来实现的。

PG全局临时表插件的使用

全局临时表插件的安装部署

一. 安装

▼▼▼

[root@test-telepg-01 ~]#su-telepg

[telepg@test-telepg-01 ~]$cd/tmp

[telepg@test-telepg-01 tmp]$wgethttps://codeload.github.com/darold/pgtt/tar.gz/v2.1

[telepg@test-telepg-01 tmp]$tar-zxvfpgtt-2.1.tar.gz

[telepg@test-telepg-01 tmp]$cdpgtt-2.1

临时生效环境变量

▼▼▼

export POSTGRES_HOME=/app/pg/pg_2_18803/postgresql

export ORACLE_HOME=/opt/oracle/product/18c/dbhome_1

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$POSTGRES_HOME/lib:$POSTGRES_HOME/lib/postgresql:$POSTGRES_HOME/plugin:$ORACLE_HOME/lib

export PROJ_LIB=”$POSTGRES_HOME/share/proj”

export PATH=$PATH:$POSTGRES_HOME/bin

编译安装

▼▼▼

[telepg@test-telepg-01 pgtt-2.1]$make

[telepg@test-telepg-01 pgtt-2.1]$makeinstall

查看三个pgtt相关文件(有证明编译安装好了,可以下一步,否则没有编译安装好,需要重新编译安装)

▼▼▼

[telepg@test-telepg-01 pgtt-2.1]$ll /app/pg/pg_2_18803/postgresql/share/postgresql/extension/pgtt*

-rw-r–r–1 telepgtelepg824 Apr2 14:47 /app/pg/pg_2_18803/postgresql/share/postgresql/extension/pgtt–2.1.0.sql

-rw-r–r–1 telepgtelepg177 Apr2 14:47 /app/pg/pg_2_18803/postgresql/share/postgresql/extension/pgtt.control

[telepg@test-telepg-01 pgtt-2.1]$ll /app/pg/pg_2_18803/postgresql/lib/postgresql/pgtt.so

-rwxr-xr-x 1 telepgtelepg43520 Apr2 14:47 /app/pg/pg_2_18803/postgresql/lib/postgresql/pgtt.so

二. 配置非超级用户使用临时表需做如下设置

▼▼▼

[telepg@test-telepg-01 pgtt-2.1]$exportlibdir=$(pg_config–pkglibdir)

[telepg@test-telepg-01 pgtt-2.1]$sudomkdir$libdir/plugins/

[telepg@test-telepg-01 pgtt-2.1]$cd$libdir/plugins/–进不去就用root用户进/app/pg/pg_2_18803/postgresql/lib/postgresql/plugins/

▼▼▼

[telepg@test-telepg-01 pgtt-2.1]$sudoln -s../pgtt.so/

[root@test-telepg-01 plugins]#ll pgtt.so lrwxrwxrwx1 rootroot10 Apr2 14:58 pgtt.so ->../pgtt.so

三. 运行单元测试用例

▼▼▼

$makeinstallcheck

四. 创建扩展插件

▼▼▼

csscyycreate extensionpgtt;

全局临时表的使用

1.创建全局临时表ONCOMMITPRESERVE

▼▼▼

CREATE/*GLOBAL*/ TEMPORARYTABLEtest(idinteger,lbltext)ONCOMMITPRESERVEROWS;

再打开一个session连接查看

▼▼▼

postgres=#setsearch_pathtopublic,pgtt_schema;SET

postgres=#ckslkslksl=>select *from test;id|lbl‐‐‐‐+‐‐‐‐‐(0 rows)

2.创建全局临时表ONCOMMITDELETE

▼▼▼

CREATE/*GLOBAL*/ TEMPORARYTABLEtest2 (idinteger,lbltext)ONCOMMITDELETEROWS;

3.删除全局临时表与删除普通表没有任何区别,需要超级用户权限

▼▼▼

ksl#load’$libdir/plugins/pgttLOAD

ksl=#droptabletest2;DROPTABLE

同时需要检查下pg_global_temp_tables表是否删除成功

select *from pg_global_temp_tableswhere relname=test2;

4.创建索引需要超级用户权限

▼▼▼

ksl=#CREATEINDEXONtest(id);CREATEINDEX

5. 添加约束

▼▼▼

ksl=>load$libdir/plugins/pgtt’LOADCREATE/*GLOBAL*/ TEMPORARYTABLEtest3(c1serialPRIMARYKEY,c2VARCHAR(50)UNIQUENOTNULL,c3booleanDEFAULTfalse);但不支持外键(也不支持分区表)

总结

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6039.html