open-index/open-npm huggingface dataset:
npm package: @pgkit/migra
Description: A CLI to generate PostgeSQL schema diff scripts
Author: mmkal
Latest version: 0.6.1

# migra: Like diff but for Postgres schemas

[![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/mmkal)](https://x.com/mmkalmmkal)

A schema diff tool for PostgreSQL, written in TypeScript. Generates SQL scripts to migrate a database to a target state.

A port of @djrobstep's [python migra library](https://github.com/djrobstep/migra).

- ## compare schemas
- ## autogenerate migration scripts
- ## autosync your development database from your application models
- ## make your schema changes testable, robust, and (mostly) automatic

Use it in your nodejs scripts, or from the command line like this:

```
npm install --global @pgkit/migra
```

    $ migra postgresql:///a postgresql:///b
    alter table "public"."products" add column newcolumn text;

    alter table "public"."products" add constraint "x" CHECK ((price > (0)::numeric));

`migra` magically figures out all the statements required to get from A to B.

Most features of PostgreSQL are supported.

**Migra supports PostgreSQL >= 9 only.** Known issues exist with earlier versions. More recent versions are more comprehensively tested. Development resources are limited, and feature support rather than backwards compatibility is prioritised.

## THE DOCS

Documentation for the original library is at [databaseci.com/docs/migra](https://web.archive.org/web/20220309093235/https://databaseci.com/docs/migra) (on archive.org because the original site, databaseci.com, is down at time of writing).

A port of the documentation site is a TODO for this library.

## Folks, schemas are good

Schema migrations are without doubt the most cumbersome and annoying part of working with SQL databases. So much so that some people think that schemas themselves are bad!

But schemas are actually good. Enforcing data consistency and structure is a good thing. It’s the migration tooling that is bad, because it’s harder to use than it should be. ``migra`` is an attempt to change that, and make migrations easy, safe, and reliable instead of something to dread.

## Contributing

There's no strategy set in stone right now for how this library can evolve beyond being a port of the Python original, which appears to be unmaintained. Check the issues of this repo, or for the original, it's https://github.com/djrobstep/migra/issues.

## Credits for original library

- [djrobstep](https://github.com/djrobstep): initial development, maintenance
- [alvarogzp](https://github.com/alvarogzp): privileges support
- [seblucas](https://github.com/seblucas): docker improvements
- [MOZGIII](https://github.com/MOZGIII): docker support
- [mshahbazi](https://github.com/mshahbazi): misc fixes and enhancements
npm package: @pgkit/schemainspect
Description: SQL Schema Inspection for PostgreSQL
Author: mmkal
Latest version: 0.6.1

# `schemainspect`: SQL Schema Inspection for PostgreSQL

[![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/mmkal)](https://x.com/mmkalmmkal)

Inspects tables, views, materialized views, constraints, indexes, sequences, enums, functions, and extensions. Handles table partitioning and inheritance.

A port of @djrobstep's [python schemainspect library](https://github.com/djrobstep/schemainspect).

**Limitations:** Function inspection only confirmed to work with SQL/PLPGSQL languages so far.

## Basic Usage

Install with npm:

```
npm install @pgkit/schemainspect
```

Get an inspection object from an already opened SQLAlchemy session or connection as follows:

```ts
import {PostgreSQL} from '@pgkit/schemainspect'

const inspector = await PostgreSQL.create('postgresql://')

console.log(inspector.tables)
console.log(inspector.views)
console.log(inspector.functions)

console.log(inspector.tables[`"public"."mytable"`].schema)
console.log(inspector.tables[`"public"."mytable"`].name)
console.log(inspector.tables[`"public"."mytable"`].columns.mycolumn.dbtype)
console.log(inspector.tables[`"public"."mytable"`].columns.mycolumn.is_nullable)
```

The inspection object has attributes for tables, views, and all the other things it tracks. At each of these attributes you'll find a dictionary (`Record<string, ...>`) mapping from fully-qualified-and-quoted-name-of-thing-in-database to information object.

For instance, the information about a table *books* would be accessed as follows:

    >>> books_table = i.tables['"public"."books"']
    >>> books_table.name
    'books'
    >>> books_table.schema
    'public'
    >>> [each.name for each in books_table.columns]
    ['id', 'title', 'isbn']


## Documentation

Documentation is a bit patchy at the moment. Watch this space!


## Author Credits

Initial development, maintenance:

- [djrobstep](https://github.com/djrobstep)

TypeScript port:

- [mmkal](https://github.com/mmkal)

Contributions:

- [BenSjoberg](https://github.com/BenSjoberg)
- [johto](https://github.com/johto)