HACKER Q&A
📣 aleclarsoniv

Seeking feedback on my Postgres TypeScript thing


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 and a code generator. It's not production-ready yet (more on that below).

The link: https://github.com/pg-nano/pg-nano/

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.

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.

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.

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.

The link again: https://github.com/pg-nano/pg-nano/

~~~

I posted all this to get your feedback:

- Could you see yourself using pg-nano? Why or why not?

- Are there specific features you’d like to see, or concerns you have?

I could really use some beta testers, but even your thoughts would help a great deal.

~~~

In order to get pg-nano production ready, I have a few things left to do.

1. Database seeding

2. Migrations in production

3. Transactions


  👤 gulcin_xata Accepted Answer ✓
I see you're using pg-schema-diff for schema diffing, hadn’t come across it before, so thanks for mentioning it!

Have you seen pgroll? https://github.com/xataio/pgroll 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: https://pgroll.com/docs/v0.8.0/getting-started