hg_job配置定时刷新物化视图

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hg_job配置定时刷新物化视图相关的知识,希望对你有一定的参考价值。

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5
文档用途
客户的业务库中使用了物化视图,定期获取最新的数据,不需要实时获取。定期刷新物化视图需要通过瀚高的定时任务hg_job实现。

客户使用的瀚高库是安全版4.5.6,本次以安全版4.5.6为测试库,详细配置一下物化视图定时刷新的任务。

详细信息
1.配置hg_job的相关参数

①修改配置文件

vim /opt/HighGo4.5.6-see/data/postgresql.conf
修改前:
#shared_preload_libraries = 'hg_job'    # (change requires restart)

修改后:

shared_preload_libraries = 'hg_job'    # (change requires restart)

hg.job_database = 'mvdb'     # (设定为创建定时任务的数据库名)

hg.job_queue_processes = 0    #并发数先设置为0

hg.job_queue_interval = 60    #扫描间隔为60

保存退出

重启数据库服务,pg_ctl restart

②在数据库的data目录下创建hg_job目录

mkdir /opt/HighGo4.5.6-see/data/hg_job

2.创建测试用户和测试库

①psql命令或者客户端连接数据库

psql -U sysdba -d highgo

②执行下面创建语句

create user mvuds with password 'xxxxxx';

create database mvdb owner mvuds;

③切换用户和数据库

\\c mvdb mvuds

④创建测试表

create schema mvuds;

create table mvuds.t1(id int,sname text);

⑤创建物化视图

create materialized view mvuds.mv_t1 as select * from mvuds.t1;

⑥创建免密文件,密码设置为实际的密码

如果pgpass文件中有内容,在最后空白行中添加

vim ~/.pgpass

#hostname:port:database:username:password

localhost:5866:mvdb:sysdba:xxxxxx

 

保存退出,然后修改文件权限:

chmod 0600 ~/.pgpass

3.在测试库中创建hg_job扩展

①关闭三权

psql -U syssso -d mvdb

select set_secure_param('hg_sepofpowers','off');

\\q

pg_ctl restart

②创建hg_job扩展

psql -U sysdba -d mvdb

create extension hg_job;

\\q

③创建扩展成功后,打开三权

psql -U syssso -d mvdb

select set_secure_param('hg_sepofpowers','on');

\\q

pg_ctl restart

4.创建定时任务

①设置为每隔2分钟执行一次

psql -U sysdba -d mvdb

select hgjob.job_create(

$body$

        do $do$

            begin

            refresh materialized view mvuds.mv_t1;

           end;

        $do$;

$body$

,$$now() + interval '2 minute'$$,now());

②配置并发数大于0的值

vim /opt/HighGo4.5.6-see/data/postgresql.conf
修改前:

hg.job_queue_processes = 0

修改后:

hg.job_queue_processes = 5

③重启数据库

pg_ctl restart

④查看创建的定时任务

mvdb=# select * from hgjob.job;
 jobid | jobenabled |                      jobwhat                       |         jobinterval         |          jobnextrun           |          jobstartrun

    |          joblastrun           | jobuser | jobcount

-------+------------+----------------------------------------------------+-----------------------------+-------------------------------+---------------------------

----+-------------------------------+---------+----------

     2 | t          |                                                   +| now() + interval '2 minute' | 2022-01-12 15:09:38.431608+08 | 2022-01-12 15:07:03.982518

+08 | 2022-01-12 15:07:38.431608+08 | sysdba  |        1

       |            |         do $do$                                   +|                             |                               |

    |                               |         |

       |            |             begin                                 +|                             |                               |

    |                               |         |

       |            |             refresh materialized view mvuds.mv_t1;+|                             |                               |

    |                               |         |

       |            |            end;                                   +|                             |                               |

    |                               |         |

       |            |         $do$;                                     +|                             |                               |

    |                               |         |

       |            |                                                    |                             |                               |

    |                               |         |

(1 行记录)

5.测试

①测试数据准备

mvdb=> select * from mv_t1;

 id | sname

----+-------

  1 | zhao

  2 | qian

  3 | sun

  4 | li

(4 行记录)



mvdb=> select * from t1;

 id | sname

----+-------

  1 | zhao

  2 | qian

  3 | sun

  4 | li

(4 行记录)

②t1表中插入2条记录

mvdb=> insert into t1 values(5,'zhou');

INSERT 0 1

mvdb=> insert into t1 values(6,'wu');

INSERT 0 1

③查询t1表和物化视图mv_t1中的数据

mvdb=> select * from t1;

 id | sname

----+-------

  1 | zhao

  2 | qian

  3 | sun

  4 | li

  5 | zhou

  6 | wu

(6 行记录)



mvdb=> select * from mv_t1;

 id | sname

----+-------

  1 | zhao

  2 | qian

  3 | sun

  4 | li

(4 行记录)

④间隔2分钟之后,查看定时任务执行情况

mvdb=# select * from hgjob.job;

 jobid | jobenabled |                      jobwhat                       |         jobinterval         |          jobnextrun           |          jobstartrun

    |          joblastrun           | jobuser | jobcount

-------+------------+----------------------------------------------------+-----------------------------+-------------------------------+---------------------------

----+-------------------------------+---------+----------

     2 | t          |                                                   +| now() + interval '2 minute' | 2022-01-12 15:11:38.606462+08 | 2022-01-12 15:07:03.982518

+08 | 2022-01-12 15:09:38.606462+08 | sysdba  |        2

       |            |         do $do$                                   +|                             |                               |

    |                               |         |

       |            |             begin                                 +|                             |                               |

    |                               |         |

       |            |             refresh materialized view mvuds.mv_t1;+|                             |                               |

    |                               |         |

       |            |            end;                                   +|                             |                               |

    |                               |         |

       |            |         $do$;                                     +|                             |                               |

    |                               |         |

       |            |                                                    |                             |                               |

    |                               |         |

(1 行记录)

⑤再次查询物化视图mv_t1的数据,已经刷新了

mvdb=> select * from mv_t1;

 id | sname

----+-------

  1 | zhao

  2 | qian

  3 | sun

  4 | li

  5 | zhou

  6 | wu

(6 行记录)

至此,结束。

以上是关于hg_job配置定时刷新物化视图的主要内容,如果未能解决你的问题,请参考以下文章

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间

PostgreSQL定时刷新物化视图的一种简单方法

oracle物化视图不会自动更新是怎么回事

Oracle-视图

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

oracle 物化视图 job