npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sfm

v1.4.1

Published

simply fabulous migrations for postgresql

Downloads

963

Readme

SIMPLY FABULOUS MIGRATIONS

The simplest postgresql migration tool.

Migrations?

You write fabulous scripts.

This tool runs them and remembers which ones have been run, so each one is only fabulously run once.

All of the scripts are run inside a single transaction.

If there is an error running migration, the migration process is stopped and all migrations are rolled back.

What kind of fabulous scripts?

Two fabulous kinds:

1. Fabulous SQL scripts.

Not much to fabulously say about this.

2. Javascript files

Each javascript migration exports one fabulous function that accepts a client and returns a promise:

The client has a single method: query that takes a sql string and optionally an array of parameters:

module.exports = async (client) => {
  await client.query('CREATE TABLE whatever (who_cares text, not_me int)');
  await client.query('INSERT INTO whatever (who_cares, not_me) VALUES ($1, $2)', ['example', 42])
}

Check out https://node-postgres.com/features/queries for more information on the client interface.

See the /examples directory for a couple of simple examples.

In what order?

The scripts will be sorted alphabetically by filename so use some sort of fabulous system with dates or numbers or something for naming the files.

For which databases?

PostgreSQL. What else?

How do I run this fabulous thing?

On the command-line:

You pass it the following arguments:

  • the command: either "run", "test", or "info"

  • the database url (or database name for localhost)

Guess what this is? That's right: a fabulous postgresql url!

  • the path to the migration scripts

Defaults to pwd which probably is fabulously stupid so set this fabulous variable.

  • optional: schema name.

Allows the use of sfm to independently manage each schema in a database

  • If a schema name is set:
    • The schema will be created if it doesn't exist
    • The postgres search_path will be set to only contain the specified schema for all migrations
    • the sfm_migrations table that holds data about which migrations will live in the specified schema (ie: my_schema.sfm_migrations)

examples

sfm run

Run migrations:

$ sfm run my_local_db db/migrations/

sfm info

Find out which migrations have been run:

$ sfm info my_local_db

sfm test

Test your migrations (note: terrible, terrible SQL query output at present)

This will run all unapplied migrations in a transaction and roll back at the end, while logging some information about the queries that were executed.

$ sfm test my_local_db db/migrations/

Run programatically in node:

Import sfm and initialize it with the url from your database:

const sfm = require('sfm').default;

const databaseUrl = process.env.DATABASE_URL

const migrations = sfm(databaseUrl).fromDirectory(path.join(__dirname, '/migrations'))

const result = await migrations.run()

console.log(result)

What about down migrations?

Fabulous idea, but no.