App-Sqitch

 view release on metacpan or  search on metacpan

lib/sqitch.pod  view on Meta::CPAN


=item * L<Exasol|https://www.exasol.com/> 6.0+

=item * L<Snowflake|https://www.snowflake.net/>

=item * L<ClickHouse|https://www.clickhouse.com/clickhouse/> 24+

=back

What makes it different from your typical
L<migration|Module::Build::DB>-L<style|DBIx::Migration> approaches? A few
things:

=over

=item No opinions

Sqitch is not tied to any framework, ORM, or platform. Rather, it is a
standalone change management system with no opinions about your database
engine, application framework, or development environment.

=item Native scripting

Changes are implemented as scripts native to your selected database engine.
Writing a L<PostgreSQL|https://postgresql.org/> application? Write SQL scripts
for L<C<psql>|https://www.postgresql.org/docs/current/static/app-psql.html>.
Writing an L<Oracle|https://www.oracle.com/us/products/database/>-backed app?
Write SQL scripts for L<SQL*Plus|https://www.orafaq.com/wiki/SQL*Plus>.

=begin comment

=item VCS integration

Sqitch likes to use your VCS history to determine in what order to execute
changes. No need to keep track of execution order; your VCS already tracks
information sufficient for Sqitch to figure it out for you.

=end comment

=item Dependency resolution

Database changes may declare dependencies on other changes -- even on changes
from other Sqitch projects. This ensures proper order of execution, even when
you've committed changes to your VCS out-of-order.

=item Deployment integrity

Sqitch manages changes and dependencies via a plan file, and employs a
L<Merkle tree|https://en.wikipedia.org/wiki/Merkle_tree> pattern similar to
L<Git|https://stackoverflow.com/a/18589734/> and
L<Blockchain|https://medium.com/byzantine-studio/blockchain-fundamentals-what-is-a-merkle-tree-d44c529391d7>
to ensure deployment integrity. As such, there is no need to number your
changes, although you can if you want. Sqitch doesn't much care how you name
your changes.


=item Iterative Development

Up until you L<tag|sqitch-tag> and L<release|sqitch-bundle> your project, you
can modify your change deployment scripts as often as you like. They're not
locked in just because they've been committed to your VCS. This allows you to
take an iterative approach to developing your database schema. Or, better, you
can do test-driven database development.

=begin comment

=item Bundling

Rely on your VCS history for deployment but have Sqitch bundle up changes for
distribution. Sqitch can read your VCS history and write out a plan file along
with the appropriate deployment and reversion scripts. Once the bundle is
installed on a new system, Sqitch can use the plan file to deploy or the
changes in the proper order.

=item Reduced Duplication

If you're using a VCS to track your changes, you don't have to duplicate
entire change scripts for simple changes. As long as the changes are
L<idempotent|https://en.wikipedia.org/wiki/Idempotence>, you can change
your code directly, and Sqitch will know it needs to be updated.

=end comment

=back

Ready to get started? Here's where:

=over

=item Sqitch Tutorials

Detailed tutorials demonstrating the creation, development, and maintenance
of a database with Sqitch.

=over

=item * L<PostgreSQL, YugabyteDB, CockroachDB Tutorial|sqitchtutorial>

=item * L<SQLite Tutorial|sqitchtutorial-sqlite>

=item * L<MySQL Tutorial|sqitchtutorial-mysql>

=item * L<Oracle Tutorial|sqitchtutorial-oracle>

=item * L<Firebird Tutorial|sqitchtutorial-firebird>

=item * L<Vertica Tutorial|sqitchtutorial-vertica>

=item * L<Exasol Tutorial|sqitchtutorial-exasol>

=item * L<Snowflake Tutorial|sqitchtutorial-snowflake>

=back

=item L<PDX.pm Presentation|https://speakerdeck.com/theory/sane-database-change-management-with-sqitch>

Slides from "Sane Database Management with Sqitch", presented to the Portland
Perl Mongers in January, 2013.

=item L<PDXPUG Presentation|https://vimeo.com/50104469>



( run in 0.754 second using v1.01-cache-2.11-cpan-63c85eba8c4 )