Hey HN! I'm the creator of pg-nano. It's not an ORM, a query builder, or a basic query driver, but it's closest to the last one. The twist is, it's also a migration tool <i>and</i> a code generator. It's not production-ready yet (more on that below).<p>The link: https://github.com/pg-nano/pg-nano/<p>It generates TypeScript bindings for your native Postgres routines (think `CREATE FUNCTION` or `CREATE PROCEDURE`, sorry for yelling). For views (e.g. CREATE VIEW), pg-nano can infer each column's “nullability” via static analysis. I plan to extend that inference to user-defined routines in the near future, but the generated types are already quite good.<p>From your TypeScript application server, you call your Postgres routines with 100% type safety. The query driver uses libpq, the official C driver, under the hood. I've implemented a connection pool, auto-reconnect with exponential backoff, and query streaming on top of libpq.<p>It scans a directory for `.sql` files and instantly updates your local database instance by diffing the current schema with the desired schema. It only drops data if absolutely necessary. Note that I haven't implemented production migrations yet, which will of course err on the safe side.<p>I use a combination of static analysis (parsing your SQL) and introspection (querying Postgres system tables) at compile time to both generate the TypeScript bindings and the migration plan.<p>The link again: https://github.com/pg-nano/pg-nano/<p>~~~<p>I posted all this to get your feedback:<p>- Could you see yourself using pg-nano? Why or why not?<p>- Are there specific features you’d like to see, or concerns you have?<p>I could really use some beta testers, but even your thoughts would help a great deal.<p>~~~<p>In order to get pg-nano production ready, I have a few things left to do.<p>1. Database seeding<p>2. Migrations in production<p>3. Transactions
I see you're using pg-schema-diff for schema diffing, hadn’t come across it before, so thanks for mentioning it!<p>Have you seen pgroll? <a href="https://github.com/xataio/pgroll">https://github.com/xataio/pgroll</a>
It is a Postgres schema migration tool for achieving zero downtime, minimal locking schema changes. Thought it might be interesting for you. I also checked the unsupported operations in pg-schema-diff, and from a quick look, pgroll seems to cover more migration types: <a href="https://pgroll.com/docs/v0.8.0/getting-started" rel="nofollow">https://pgroll.com/docs/v0.8.0/getting-started</a>