Postgres物化视图依赖关系管理器

pg-materialize的Python项目详细描述


https://badge.fury.io/py/pg-materialize.svghttps://travis-ci.org/aanari/pg-materialize.svg?branch=masterhttps://coveralls.io/repos/github/aanari/pg-materialize/badge.svg?branch=master
logo.jpg

pg_materialize是一个实用程序,用于从包含Materialized Viewsql定义的目录中生成postgresql创建和刷新脚本。它使用psqlparse将sql转换为解析树,通过生成dag来标识哪些物化视图依赖于其他视图,并生成构造和刷新这些视图的正确顺序。递归地遍历源目录,正确地处理跨模式视图,并从最终输出中筛选出无关的事务语法块。每次后续运行的文件都用后缀YYYYMMDD-HHMMSS.sql标记时间戳。

支持的Python版本

  • python 2.7版
  • Python3.3+

安装

如果您的系统上有pip,您可以简单地安装或升级python库:

pip install -U pg_materialize

或者,您可以从PyPI下载源发行版,将其取消存档,然后运行:

python setup.py install

注意:上述两种方法都将pg_materialize安装为系统范围的包。您可以考虑使用virtualenv来创建独立的python环境。

用法

示例命令:

pg_materialize -v \
    -i ~/Projects/my_project/src \
    -o ~/Projects/my_project/output \
    -p _mv \
    -I invites

示例输出:

Found 97 Scripts in /Users/ali/Projects/my_project/src
Identified 169 Materialized Views, Containing 90 View Dependencies

Materialized View Dependencies:
'public.users_mv': ['public.user_addresses_mv', 'public.user_invites_mv'],
'public.orders_mv': ['public.payment_methods_mv']

Selecting 97 Materialized Views for Refresh
Successfully Saved Creation Script to ~/Projects/my_project/output/create-20170824-120626.sql
Successfully Saved Refresh Script to ~/Projects/my_project/output/refresh-20170824-120626.sql
Process Complete!

示例创建脚本:

BEGIN;-- ~/Projects/my_project/src/public/user_addresses.sql
CREATEMATERIALIZEDVIEWIFNOTEXISTSpublic.user_addresses_mvAS(SELECT*FROMpublic.user_addressesWHEREcreated_at>=CURRENT_DATE-INTERVAL'6 MONTHS')WITHDATA;-- ~/Projects/my_project/src/public/user_invites.sql
CREATEMATERIALIZEDVIEWIFNOTEXISTSpublic.user_invites_mvAS(SELECT*FROMpublic.user_invitesWHEREcreated_at>=CURRENT_DATE-INTERVAL'6 MONTHS')WITHDATA;-- ~/Projects/my_project/src/public/payment_methods.sql
CREATEMATERIALIZEDVIEWIFNOTEXISTSpublic.payment_methods_mvAS(SELECT*FROMpublic.payment_methodsWHEREcreated_at>=CURRENT_DATE-INTERVAL'6 MONTHS')WITHDATA;-- ~/Projects/my_project/src/public/users.sql
CREATEMATERIALIZEDVIEWIFNOTEXISTSpublic.users_mvAS(SELECT*FROMpublic.usersWHEREcreated_at>=CURRENT_DATE-INTERVAL'6 MONTHS')WITHDATA;-- ~/Projects/my_project/src/public/orders.sql
CREATEMATERIALIZEDVIEWIFNOTEXISTSpublic.orders_mvAS(SELECT*FROMpublic.ordersWHEREcreated_at>=CURRENT_DATE-INTERVAL'6 MONTHS')WITHDATA;COMMIT;

刷新脚本示例:

BEGIN;REFRESHMATERIALIZEDVIEWCONCURRENTLYpublic.user_addresses_mv;REFRESHMATERIALIZEDVIEWCONCURRENTLYpublic.payment_methods_mv;REFRESHMATERIALIZEDVIEWCONCURRENTLYpublic.users_mv;REFRESHMATERIALIZEDVIEWCONCURRENTLYpublic.orders_mv;COMMIT;

选项

pg_materialize接受以下命令行参数。

-d
--dry-run
Analyzes dependencies without actually generating the output files.
-i
--input-dir
The directory for the PostgreSQL scripts to analyze.
-I
--ignore-refresh
Regex pattern to match when ignoring refresh on Materialized Views (i.e. ^{tt11}$ for ^{tt12}$).
-o
--output_dir
The directory for the output creation and refresh scripts.
-p
--pattern
Materialized View regex pattern to match (i.e. ^{tt17}$ for ^{tt18}$).
-v
--verbose
Enables verbose logging.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
试图读取字段“java”。lang.反对安卓。util。一对首先   gradle对java的影响。属性作为任务的输入?   java我的return语句不起作用。我做错了什么?   java通用同步代码块[无对象锁定]   macos Java小程序游戏不能在Mac上运行,即使它可以在PC上运行   java Firebase GeoFire设置位置未在服务中工作   java排序字符串对象   java通过JLabel上传背景图像(jpg)后,如何将图像缩放到它所在的面板上?   java无法连接到jsp中的数据库   java如何在整个ant taskdef操作的执行过程中拥有一个singleton类实例   java如何在按键事件中检查JTtextField中的字符串数字验证器   如何最好地输出大型单行XML文件(使用Java/Eclipse)?   内存不足,Java运行时环境无法在Java应用程序中继续运行   java Hibernate连接错误:组织上的NullPointerException。冬眠hql。阿斯特。HqlSqlWalker。createFromJoinElement   linux将参数从shell脚本传递到java类   java对于接受多个参数的setter是否有类似于@JsonCreator的注释?   java在链表中添加节点