Giter VIP home page Giter VIP logo

poma's Introduction

poma

Postgresql projects Makefile

poma предназначен для облегчения загрузки в БД postgresql SQL-кода (DDL и DML) в проектах, где такой код разделяется на несколько файлов и каталогов. Далее такие каталоги называются "пакеты".

Если SQL-код размещен в пакетах под общим корнем sql/, то poma - один из пакетов в общем списке.

Project tree

Структура проектов, использующих poma, имеет вид:

poma-sample
├── .env - конфигурация проекта, создается `make config`
├── Makefile - основной Makefile проекта, имеет строку `include sql/poma/Makefile`
└── sql
    ├── poma - клон проекта poma (без изменений)
    │   ├── 00_cleanup.sql
    │   ├── ...
    │   ├── Makefile - Makefile с рецептами poma
    │   └── README.md
    └── sample - другие sql-пакеты проекта
        ├── 00_cleanup.sql

Usage

Т.к. порядок загрузки пакетов имеет значение и из одного комплекта пакетов могут загружаться в БД разные наборы, списки пакетов именуются и размещаются в основном Makefile проекта. Пример для списка с именем all:

%-all: POMA_PKG=sample1 sample2

В результате, для работы с этим списком пакетов, к целям ниже (кроме config) добавятся аналогичные с суффиксом -all. Если суффикс не указан, по умолчанию используется %-default. Пример - см. Makefile проекта poma-sample.

В результате include sql/poma/Makefile, основной Makefile проекта будет поддерживать следующие цели:

  • make config - создать файл настроек (.env) всего проекта
  • make poma-install - создать схему poma
  • make poma-create[-default] - первичное создание пакета
  • make poma-build[-default] - сборка хранимого кода
  • make poma-test[-default] - запуск тестов
  • make poma-recreate[-default] - пересоздание пакетов со сборкой кода
  • make poma-drop[-default] - удаление пакета
  • make poma-erase[-default] - удаление пакета и его персистентных данных
  • make poma-uninstall - удалить схему poma, если нет других пакетов

SQL filename

Файлы в пакетах имеют формат MM_описание[_once].sql, где

тип MM имеет значения:

  • 00 - drop/erase: удаление связей текущей схемы с другими схемами
  • 01 - erase: удаление защищенных объектов из других схем (wsd)
  • 02 - drop/erase: удаление текущей схемы (02_drop)
  • 10 - init: инициализация до создания схемы
  • 11 - init: создание схемы, после выполнения 11* имя схемы из имени каталога добавится в путь поиска
  • 12 - init: зависимости от других пакетов, создание доменов и типов
  • 1[4-9] - общие файлы для init и make, код, не имеющий зависимостей от объектов, может использоваться при создании таблиц
  • 2x - создание таблиц
  • 3x - ф-и для представлений
  • 4x - представления
  • 5x - основной код функций
  • 6x - код триггеров
  • 7x - создание триггеров
  • 8x - наполнение таблиц
  • 9x - тесты

Если файл имеет суффикс _once, то он будет выполнен однократно.

Препроцессинг

  • [1,3,5,6]*.sql - замена /($_$)($| +#?)/ на \1\2 /* FILENAME:FILELINE */
  • [2,4,8]*_once.sql - в вызов таких файлов добавляется поддержка однократного запуска с WARNING при изменении md5
  • 9*.sql - замена / -- BOT/ и /; -- EOT/ на код поддержки тестов

Алгоритм

Процесс для каждого пакета

  1. получить список файлов процесса
  2. обработать файлы с ф-ями
  3. обработать тесты
  4. сгенерить вызов для файлов *_once.sql

Общий процесс

  1. получить список пакетов
  2. если recreate
    1. процесс drop для каждого пакета в обратном порядке
    2. процесс create для каждого пакета
    3. собрать инклюды в build.sql
  3. иначе
    1. процесс для каждого пакета
    2. собрать инклюды в build.sql
  4. запустить build.sql

Примеры

make clean poma-build POMA_PKG=
make clean poma-build POMA_PKG=sample

Для разработчика poma могут быть полезны команды из каталога poma:

make poma-clean .build/create.psql POMA_PKG=poma SQL_ROOT=.. MASK=[1-9]?_*.sql
make poma-clean .build/drop.psql POMA_PKG=poma SQL_ROOT=.. MASK="00_*.sql 02_*.sql"

TODO

  • creatif (не пытаться создавать существующий пакет)
  • доработать log()
  • psql в docker
  • в deps проверять psql
  • поддержка make v3.81
  • сделать тест работы make
  • если awk ничего не поменял - вызвать исходник из sql/
  • make update - если пакета нет, create, иначе - build
  • поддержка go-bindata

License

The MIT License (MIT), see LICENSE.

Copyright (c) 2010-2018 Tender.Pro team [email protected] Copyright (c) 2018 Aleksei Kovrizhkin [email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.