Skip to content

sasha-alias/pgbuild

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pgbuild

simple deployment for Postgresql

Pgbuild allows to describe database application using simple YAML syntax.

Database Description

Every database objects should be described in a separate yaml or sql file.

Example of file describing a table:

table: myschema.mytable
description: table of tables
columns:
    - col1:
        type: int
        default: 0
        not_null: true
        description: test
    - col2: text
    ...
primary_key: [col1, col2]
indexes:
    - idx1: [colN, colM]
    - idx2: (lower(colN || colM))
    - idx3:
        fields: [colN, colM]
        method: btree
        unique: true
check:
    - check_col3: ...
    - ...

Description of custom types using yaml syntax:

type: myschema.mytype
attributes:
    - attr1: int
    - attr2: text
    ...

For stored functions it is even simpler, just store them in sql files with CREATE OR REPLACE statement

CREATE OR REPLACE FUNCTION myschema.myfunction() 
RETURNS void AS 
$$
BEGIN
    RETURN;
END;
$$
LANGUAGE plpgsql

Now to put it all together:

myapp:
    - schema: myschema
    - table: path/to/mytable.yaml
    - type: path/to/mytype.yaml
    - function: path/to/myfunction.sql

For running arbitrary SQL query during application deployment use the the following syntax:

myapp:
    - sql: ALTER TABLE myschema.mytable ...

Objects Deployment and Diffing

In order to deploy a table described in yaml file to a single instance of database use the following command:

pgbuild deploy path/to/mytable.yaml postgresql://user@host:port/dbname

This will drop a table if such exists and create new one according to description from file.

In order to take a look at DDL statement of a table from yaml file execute:

pgbuild ddl path/to/mytable.yaml

It's possible to print out the difference between two tables.

For example diff local table from file and existing from database:

pgbuild diff path/to/mytable.yaml postgresql://user@host:port/dbname/myschema.mytable

The similar way by defining different targets it's possible to compare remote and local tables in any combination.

Application or Component Deployment

In order to deploy a database application or a single component you have to describe it first using yaml syntax as described above. Then you can create a build.

pgbuild build path/to/myapp.yaml local/destination/path

Build contains ready to deploy sql scripts. By default scripts are created for being run with psql.

It's possible though to create playbooks for Ansible by defining a builder format:

pgbuild build path/to/myapp.yaml local/destination/path --format=ansible

So you can deploy them either using psql or Ansible.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published