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 JMS   java如何从SeleniumWebDriver中的“Span Type下拉列表”中选择值   java JPA相当于Hibernate的@Generated(GenerationTime.ALWAYS)   java ActiveMQ查询:如何启动   java如何在jsp文件中使用freemarker标记库?   java如何在TabsLayout中用另一个片段替换一个片段的内容?   国际化如何理解Java教程国际化定制资源包加载示例?   XML配置中的java spring log4j无法为日志信息创建文件   oracle11g JDK 6:有没有办法运行一个新的java进程来执行指定类的主方法   java在avro模式中使用“default”   缺陷跟踪我在哪里可以提交关于FOSS Java Sound实施组织的缺陷报告。类路径。冰岛。pulseaudio。Pulseaudiosourcedaline?   编码Java系统。在和系统中。Sun/Oracle和IBM JVM解决方案在读写标准字节数组方面存在差异   java如何将列表项作为查询参数添加到字符串url中?   将自定义库导出到可导入jar文件java