PostgreSQL Just Joined the FunkyORM Party

FunkyORM 3.1.0 talks to PostgreSQL through Npgsql, on the same package as SQL Server. Plain C# classes are the mapping unit — FunkyORM, a .NET micro-ORM, sends them to SQL Server, PostgreSQL, MySQL, and SQLite without a DbContext or XML mapping files. Npgsql is the usual .NET driver for PostgreSQL, and it is the driver this release sits on.
Introducing Funcular ORM is the original walkthrough of the mapper; Funcular.FunkyOrm on GitHub holds the PostgreSQL provider and the C# source.
Same classes, different engine
You still use Npgsql; PostgreSqlOrmDataProvider is built on that driver, so the connection you already know how to open is the connection the mapper uses. What you already had against SQL Server is what you get here: zero-config POCO mapping, so you write a plain C# class and the provider maps it without a DbContext or an XML mapping file. Lambda LINQ becomes parameterized SQL, which is the query you wrote as a lambda hitting the server with parameters instead of concatenated values. Remote properties ([RemoteProperty], [RemoteKey]) still work on those classes, so a property that lives on a related row is still mapped when the engine is PostgreSQL. You can swap providers and keep the entity classes, including the ones that use those attributes.
How the SQL differs
The dialect quotes reserved-word identifiers with double quotes, pages with LIMIT/OFFSET, uses RETURNING on inserts (the insert can give you the new row back in the same round trip), and talks to native BOOLEAN columns, so a C# bool is a boolean on the server, not 0 or 1. If a column name is a reserved word, you will see double quotes around it in the SQL the provider sends. An insert that needs the new row back uses RETURNING so you are not issuing a second select for the identity.
Funcular.Data.Orm 3.1.0 is the PostgreSQL drop; a reserved-word column that still needs quoting you did not expect belongs on the GitHub repo, next to the provider.
