Link Search Menu Expand Document

PostgreSqlStatementBuilder


This class is the BaseStatementBuilder-derived implementation for PostgreSQL. It is automatically registered by PostgreSqlBootstrap — you do not need to instantiate it directly under normal use.

It generates "schema"."table"-quoted, @-parameterized SQL, and uses LIMIT/OFFSET for BatchQuery and the internal skip/take query rather than a windowed CTE.

For Insert, InsertAll, Merge and MergeAll, the newly generated identity or primary key value is returned via a RETURNING clause. Merge/MergeAll are compiled as INSERT ... ON CONFLICT (qualifiers) DO UPDATE SET ..., adding OVERRIDING SYSTEM VALUE whenever an identity field is present so an explicit value can still be supplied for a GENERATED ALWAYS AS IDENTITY column.

InsertAll composes a single multi-row INSERT ... VALUES (...), (...), ... statement rather than delegating to the base class’s sub-query form — PostgreSQL rejects the latter for this operation (issue #1143).

Truncate is compiled as TRUNCATE TABLE ... RESTART IDENTITY, resetting any identity sequence back to its start value.

Constructors

public PostgreSqlStatementBuilder()
public PostgreSqlStatementBuilder(IDbSetting dbSetting,
    IResolver<Field, IDbSetting, string> convertFieldResolver = null,
    IResolver<Type, Type> averageableClientTypeResolver = null)

The parameterless constructor resolves dbSetting via DbSettingMapper.Get<NpgsqlConnection>(), so it can only be used after PostgreSqlBootstrap has run. convertFieldResolver defaults to PostgreSqlConvertFieldResolver, used to render CAST(...) expressions for typed fields.

Usability

Use StatementBuilderMapper to override it with a custom implementation.

StatementBuilderMapper.Add(typeof(NpgsqlConnection), new MyCustomPostgreSqlStatementBuilder(dbSetting), true);