{ "info": { "author": "Ali Anari", "author_email": "ali@anari.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Database", "Topic :: Utilities" ], "description": "pg_materialize\n==============\n\n.. image:: https://badge.fury.io/py/pg-materialize.svg\n :target: https://badge.fury.io/py/pg-materialize\n\n.. image:: https://travis-ci.org/aanari/pg-materialize.svg?branch=master\n :target: https://travis-ci.org/aanari/pg-materialize\n\n.. image:: https://coveralls.io/repos/github/aanari/pg-materialize/badge.svg?branch=master\n :target: https://coveralls.io/github/aanari/pg-materialize?branch=master\n\n.. figure:: logo.jpg\n\n``pg_materialize`` is a utility for generating PostgreSQL creation and refresh scripts from a directory containing `Materialized View `_ SQL definitions. It uses `psqlparse `_ to transform the SQL into parse trees, identifies which Materialized Views have a dependency on other views by generating a DAG, and produces the correct order for constructing and refreshing these views. The source directory is traversed recursively, cross-schema views are handled correctly, and extraneous transaction syntax blocks are filtered out from the final output. The files from each subsequent run are timestamped with the suffix ``YYYYMMDD-HHMMSS.sql``.\n\nSupported Python Versions\n-------------------------\n\n- Python 2.7\n- Python 3.3+\n\nInstallation\n------------\n\nIf you have `pip `_ on your system, you can simply install or upgrade the Python library:\n\n.. code:: sh\n\n pip install -U pg_materialize\n\nAlternately, you can download the source distribution from `PyPI `_, unarchive it, and run:\n\n.. code:: sh\n\n python setup.py install\n\nNote: both of the methods described above install ``pg_materialize`` as a system-wide package. You may consider using `virtualenv `_ to create isolated Python environments instead.\n\nUsage\n-----\n\n**Example Command:**\n\n.. code:: sh\n\n pg_materialize -v \\\n -i ~/Projects/my_project/src \\\n -o ~/Projects/my_project/output \\\n -p _mv \\\n -I invites\n\n**Example Output:**\n\n.. parsed-literal::\n\n Found 97 Scripts in /Users/ali/Projects/my_project/src\n Identified 169 Materialized Views, Containing 90 View Dependencies\n \n Materialized View Dependencies:\n 'public.users_mv': ['public.user_addresses_mv', 'public.user_invites_mv'],\n 'public.orders_mv': ['public.payment_methods_mv']\n \n Selecting 97 Materialized Views for Refresh\n Successfully Saved Creation Script to ~/Projects/my_project/output/create-20170824-120626.sql\n Successfully Saved Refresh Script to ~/Projects/my_project/output/refresh-20170824-120626.sql\n Process Complete!\n\n**Example Creation Script:**\n\n.. code:: sql\n\n BEGIN;\n \n -- ~/Projects/my_project/src/public/user_addresses.sql\n \n CREATE MATERIALIZED VIEW IF NOT EXISTS public.user_addresses_mv AS (\n SELECT *\n FROM public.user_addresses\n WHERE created_at >= CURRENT_DATE - INTERVAL '6 MONTHS'\n ) WITH DATA;\n \n -- ~/Projects/my_project/src/public/user_invites.sql\n \n CREATE MATERIALIZED VIEW IF NOT EXISTS public.user_invites_mv AS (\n SELECT *\n FROM public.user_invites\n WHERE created_at >= CURRENT_DATE - INTERVAL '6 MONTHS'\n ) WITH DATA;\n \n -- ~/Projects/my_project/src/public/payment_methods.sql\n \n CREATE MATERIALIZED VIEW IF NOT EXISTS public.payment_methods_mv AS (\n SELECT *\n FROM public.payment_methods\n WHERE created_at >= CURRENT_DATE - INTERVAL '6 MONTHS'\n ) WITH DATA;\n \n -- ~/Projects/my_project/src/public/users.sql\n \n CREATE MATERIALIZED VIEW IF NOT EXISTS public.users_mv AS (\n SELECT *\n FROM public.users\n WHERE created_at >= CURRENT_DATE - INTERVAL '6 MONTHS'\n ) WITH DATA;\n \n -- ~/Projects/my_project/src/public/orders.sql\n \n CREATE MATERIALIZED VIEW IF NOT EXISTS public.orders_mv AS (\n SELECT *\n FROM public.orders\n WHERE created_at >= CURRENT_DATE - INTERVAL '6 MONTHS'\n ) WITH DATA;\n \n COMMIT;\n\n**Example Refresh Script:**\n\n.. code:: sql\n\n BEGIN;\n \n REFRESH MATERIALIZED VIEW CONCURRENTLY public.user_addresses_mv;\n \n REFRESH MATERIALIZED VIEW CONCURRENTLY public.payment_methods_mv;\n \n REFRESH MATERIALIZED VIEW CONCURRENTLY public.users_mv;\n \n REFRESH MATERIALIZED VIEW CONCURRENTLY public.orders_mv;\n \n COMMIT;\n\nOptions\n-------\n\n``pg_materialize`` accepts the following command line arguments.\n\n| ``-d``\n| ``--dry-run``\n\n Analyzes dependencies without actually generating the output files.\n\n| ``-i``\n| ``--input-dir``\n\n The directory for the PostgreSQL scripts to analyze.\n\n\n| ``-I``\n| ``--ignore-refresh``\n\n Regex pattern to match when ignoring refresh on Materialized Views (i.e. ``hist`` for ``users_mv_hist``).\n\n| ``-o``\n| ``--output_dir``\n\n The directory for the output creation and refresh scripts.\n\n\n| ``-p``\n| ``--pattern``\n\n Materialized View regex pattern to match (i.e. ``_mv`` for ``users_mv``).\n\n| ``-v``\n| ``--verbose``\n\n Enables verbose logging.\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/aanari/pg-materialize", "keywords": "pg\npostgres\npsql\npgsql\npostgresql\nmaterialized\nview\ndependency\ndependencies", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "pg-materialize", "package_url": "https://pypi.org/project/pg-materialize/", "platform": "", "project_url": "https://pypi.org/project/pg-materialize/", "project_urls": { "Homepage": "https://github.com/aanari/pg-materialize" }, "release_url": "https://pypi.org/project/pg-materialize/0.4.1/", "requires_dist": null, "requires_python": "", "summary": "Postgres Materialized View Dependency Manager", "version": "0.4.1" }, "last_serial": 3260904, "releases": { "0.2.10.dev15": [ { "comment_text": "", "digests": { "md5": "09fbcafdbc833de5038a65bf2685ae57", "sha256": "65dcd61973cacf9b4b6be2e56238592d4347490835ff6713899c34a42eebc0de" }, "downloads": -1, "filename": "pg_materialize-0.2.10.dev15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "09fbcafdbc833de5038a65bf2685ae57", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8269, "upload_time": "2017-08-27T21:26:31", "url": "https://files.pythonhosted.org/packages/37/dc/71972abb39ce833637e4f73d0ca1b5ec26a55cc264b2180a49c37c8220bd/pg_materialize-0.2.10.dev15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "113c9ce6fdbb7a6db878bcbd60918e5b", "sha256": "994628a7b3cd12db833cc8c59e12e83af4eaeb1c7acef6f35584fb2734da29c4" }, "downloads": -1, "filename": "pg-materialize-0.2.10.dev15.tar.gz", "has_sig": false, "md5_digest": "113c9ce6fdbb7a6db878bcbd60918e5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32026, "upload_time": "2017-08-27T21:26:29", "url": "https://files.pythonhosted.org/packages/e7/49/0e23d02cc79f2519d0563264f3c0b5f3529559239ad77d3a21036292d14d/pg-materialize-0.2.10.dev15.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "248e61b4013af092ece529b03bea332c", "sha256": "8c5466944350d3add978b6994ed56a5d0b31f37453f19f4d043c25b95bf4223e" }, "downloads": -1, "filename": "pg_materialize-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "248e61b4013af092ece529b03bea332c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 2707, "upload_time": "2017-08-24T15:00:50", "url": "https://files.pythonhosted.org/packages/77/68/2ff60e2070a35a1a960a456292736965c2a12eafaf1827a50a093e0775c7/pg_materialize-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3dabb4a0dcd4f4abb0ea5e41de2c36b7", "sha256": "cce54e2a9e98493f8cd4cc451bb00ce62a5b648e6b17b31ccd31206187eb10f4" }, "downloads": -1, "filename": "pg-materialize-0.2.4.tar.gz", "has_sig": false, "md5_digest": "3dabb4a0dcd4f4abb0ea5e41de2c36b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1410, "upload_time": "2017-08-24T15:00:49", "url": "https://files.pythonhosted.org/packages/81/93/b55ec89a47fcef72dcdb891c522928a8e12abde9bf56c53439211b2544a1/pg-materialize-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "f06315eb4efc8e6a24b029f5c48fba37", "sha256": "07abf36f3c29ee9812904f8f013b002966303734f96b59edb2b691e5198756c8" }, "downloads": -1, "filename": "pg_materialize-0.2.5-py2-none-any.whl", "has_sig": false, "md5_digest": "f06315eb4efc8e6a24b029f5c48fba37", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4843, "upload_time": "2017-08-24T19:23:59", "url": "https://files.pythonhosted.org/packages/8e/b5/f55c2b6388d52d77a38f921fcc411de35814d99334e33a47f851f23b27ce/pg_materialize-0.2.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0442952f7924f95e1fdd6eedd54a601b", "sha256": "c88d4c0dc8b79a3e1136a8036de3426ebf6a066f4c5e4038b566054d42afb8eb" }, "downloads": -1, "filename": "pg-materialize-0.2.5.tar.gz", "has_sig": false, "md5_digest": "0442952f7924f95e1fdd6eedd54a601b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2522, "upload_time": "2017-08-24T19:23:57", "url": "https://files.pythonhosted.org/packages/30/65/5cc43e797eed717a004363405598d55e69a572d3e88c7b9788633659ea3b/pg-materialize-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "f458c20f333e8ae197dd81f027f8cc9c", "sha256": "ac4e705251905aaa8aff2f44cfe4c206288a0d207ced9fb8fc816cdde42cd64e" }, "downloads": -1, "filename": "pg_materialize-0.2.6-py2-none-any.whl", "has_sig": false, "md5_digest": "f458c20f333e8ae197dd81f027f8cc9c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7286, "upload_time": "2017-08-24T22:36:06", "url": "https://files.pythonhosted.org/packages/b6/81/f397b93f3ff5e504a1f1c5371d89592cc0b218d2deda9f746e4b249aa119/pg_materialize-0.2.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3fd92cae28ccf06b1ab24a20b8aab865", "sha256": "8ec7e2a2ebab485683684ed1067828f69433ef55b7a6af8b30bad0e41a1c6121" }, "downloads": -1, "filename": "pg-materialize-0.2.6.tar.gz", "has_sig": false, "md5_digest": "3fd92cae28ccf06b1ab24a20b8aab865", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3846, "upload_time": "2017-08-24T22:36:04", "url": "https://files.pythonhosted.org/packages/28/9c/507c1470e110d9c6a598fa4a998755efb10077ec9c5aa04160ee1eb32800/pg-materialize-0.2.6.tar.gz" } ], "0.3.0.dev17": [ { "comment_text": "", "digests": { "md5": "05f9727d440cd79426064318c39b1129", "sha256": "b83a2decf05cc5c1e26af54b82f1c403521b04ffaa9d5159e616962b138edf49" }, "downloads": -1, "filename": "pg_materialize-0.3.0.dev17-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05f9727d440cd79426064318c39b1129", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8277, "upload_time": "2017-08-27T21:46:59", "url": "https://files.pythonhosted.org/packages/03/b0/78f8ce2e83d475e13f34e284dfbdfbc1295df86a783cd359774ac785f271/pg_materialize-0.3.0.dev17-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cbdadf6435198d1863d645b6429f5fc", "sha256": "76ed21fb5f60f70d429f4aba8df2435f2d43af962d892ae4e937ff1dc263c140" }, "downloads": -1, "filename": "pg-materialize-0.3.0.dev17.tar.gz", "has_sig": false, "md5_digest": "8cbdadf6435198d1863d645b6429f5fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21323, "upload_time": "2017-08-27T21:46:57", "url": "https://files.pythonhosted.org/packages/fc/a9/c3338d1c07e6f38692bc38aeafb77ffe2ce38bbd17e7981b4b9664c212cf/pg-materialize-0.3.0.dev17.tar.gz" } ], "0.3.0.dev18": [ { "comment_text": "", "digests": { "md5": "67aac68ea05c22a01d22b137cea14d16", "sha256": "b7080d2d34d2984e6a1580501e1b8f1c63f91d3af7dedf88d0924f770dcf58fb" }, "downloads": -1, "filename": "pg-materialize-0.3.0.dev18.tar.gz", "has_sig": false, "md5_digest": "67aac68ea05c22a01d22b137cea14d16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21342, "upload_time": "2017-08-27T21:54:55", "url": "https://files.pythonhosted.org/packages/33/e8/a896010a3b94f8c3a1bf20b0277748f80c9216c6457d70e5d1e0abcdb0ee/pg-materialize-0.3.0.dev18.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "b63ae50c0c34b2a2d9fac5a4e336404b", "sha256": "019af5faec903c239be383aeb24d4c2f70853adb127a63a5119b67b465dc5102" }, "downloads": -1, "filename": "pg_materialize-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b63ae50c0c34b2a2d9fac5a4e336404b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8167, "upload_time": "2017-08-27T22:08:45", "url": "https://files.pythonhosted.org/packages/1b/b7/5138647b8700f8ee2bd6609b028c72fc430d885cac32f943ea5da63cf482/pg_materialize-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "176585e3b3e68eee92274166834059ec", "sha256": "16a8120200be660c0e3be7a43d9e270a114e478db316e141271676b739f02376" }, "downloads": -1, "filename": "pg-materialize-0.4.0.tar.gz", "has_sig": false, "md5_digest": "176585e3b3e68eee92274166834059ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21340, "upload_time": "2017-08-27T22:08:41", "url": "https://files.pythonhosted.org/packages/28/07/22f48c690357992ab1d0bf82bd52eb61183ded6602719601e697824ddddf/pg-materialize-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "3c38b8d29aa6bd856166373ee8f96d64", "sha256": "00604462015aec28c753116c1e1b6efa89bb00792bcca17ac24b5326cf753716" }, "downloads": -1, "filename": "pg_materialize-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c38b8d29aa6bd856166373ee8f96d64", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8296, "upload_time": "2017-10-18T20:14:11", "url": "https://files.pythonhosted.org/packages/da/cd/59d4a37cdac27cbe42dc619e5d6408b62b54a2061fea8e0b979b588f84e5/pg_materialize-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "461abd3a62913b1bc526ffa9f2456fa0", "sha256": "12b66d859295d6b4be7e50194e026ef10f7232cc4e305c05b9917614d8e63024" }, "downloads": -1, "filename": "pg-materialize-0.4.1.tar.gz", "has_sig": false, "md5_digest": "461abd3a62913b1bc526ffa9f2456fa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21497, "upload_time": "2017-10-18T20:14:09", "url": "https://files.pythonhosted.org/packages/50/88/986d83cc191b97305144d1fcfe1ffd51aa670a3700f682e07b8b4a510282/pg-materialize-0.4.1.tar.gz" } ], "0.4.1.dev2": [ { "comment_text": "", "digests": { "md5": "a989e85b24f7adcf055883b3715cdc3a", "sha256": "ddd2704183c10ffbd189d110dc221780dd58374386a91b82042b95bc10f1f806" }, "downloads": -1, "filename": "pg_materialize-0.4.1.dev2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a989e85b24f7adcf055883b3715cdc3a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8389, "upload_time": "2017-10-18T20:06:36", "url": "https://files.pythonhosted.org/packages/9d/9f/dde7f7aba322ce8ebf2bffe5577812b8897f2feeb3ce225047df9dbc2e57/pg_materialize-0.4.1.dev2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9939a940b776b123e01c8a5d2f41355", "sha256": "275a7dbbaa37a30e2bbc74753e0775aae0708f45d5d3d9edb79eeca67a699d45" }, "downloads": -1, "filename": "pg-materialize-0.4.1.dev2.tar.gz", "has_sig": false, "md5_digest": "b9939a940b776b123e01c8a5d2f41355", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21500, "upload_time": "2017-10-18T20:06:33", "url": "https://files.pythonhosted.org/packages/be/ef/151daf9409a48b0048b8076d367db05f993fb8aeed724981fcfbd779d954/pg-materialize-0.4.1.dev2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3c38b8d29aa6bd856166373ee8f96d64", "sha256": "00604462015aec28c753116c1e1b6efa89bb00792bcca17ac24b5326cf753716" }, "downloads": -1, "filename": "pg_materialize-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c38b8d29aa6bd856166373ee8f96d64", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8296, "upload_time": "2017-10-18T20:14:11", "url": "https://files.pythonhosted.org/packages/da/cd/59d4a37cdac27cbe42dc619e5d6408b62b54a2061fea8e0b979b588f84e5/pg_materialize-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "461abd3a62913b1bc526ffa9f2456fa0", "sha256": "12b66d859295d6b4be7e50194e026ef10f7232cc4e305c05b9917614d8e63024" }, "downloads": -1, "filename": "pg-materialize-0.4.1.tar.gz", "has_sig": false, "md5_digest": "461abd3a62913b1bc526ffa9f2456fa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21497, "upload_time": "2017-10-18T20:14:09", "url": "https://files.pythonhosted.org/packages/50/88/986d83cc191b97305144d1fcfe1ffd51aa670a3700f682e07b8b4a510282/pg-materialize-0.4.1.tar.gz" } ] }