NPipeline.Connectors.PostgreSQL.Analyzers
0.16.0
dotnet add package NPipeline.Connectors.PostgreSQL.Analyzers --version 0.16.0
NuGet\Install-Package NPipeline.Connectors.PostgreSQL.Analyzers -Version 0.16.0
<PackageReference Include="NPipeline.Connectors.PostgreSQL.Analyzers" Version="0.16.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="NPipeline.Connectors.PostgreSQL.Analyzers" Version="0.16.0" />
<PackageReference Include="NPipeline.Connectors.PostgreSQL.Analyzers"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add NPipeline.Connectors.PostgreSQL.Analyzers --version 0.16.0
#r "nuget: NPipeline.Connectors.PostgreSQL.Analyzers, 0.16.0"
#:package NPipeline.Connectors.PostgreSQL.Analyzers@0.16.0
#addin nuget:?package=NPipeline.Connectors.PostgreSQL.Analyzers&version=0.16.0
#tool nuget:?package=NPipeline.Connectors.PostgreSQL.Analyzers&version=0.16.0
NPipeline PostgreSQL Connector Analyzers
PostgreSQL connector-specific analyzers for NPipeline.
Installation
This analyzer is distributed as a separate NuGet package to provide connector-specific diagnostics only to users who use the PostgreSQL connector.
dotnet add package NPipeline.Connectors.PostgreSQL.Analyzers
Analyzers
NP9501: PostgreSQL source with checkpointing requires ORDER BY clause
Category: Reliability Default Severity: Warning
When using checkpointing with PostgreSQL source nodes, the SQL query must include an ORDER BY clause on a unique, monotonically increasing column. This
ensures consistent row ordering across checkpoint restarts. Without proper ordering, checkpointing may skip rows or process duplicates.
Example
// ❌ Warning: Missing ORDER BY clause
var source = new PostgresSourceNode<MyRecord>(
connectionString,
"SELECT id, name, created_at FROM my_table",
configuration: new PostgresConfiguration
{
CheckpointStrategy = CheckpointStrategy.Offset // Checkpointing enabled
}
);
// ✅ Correct: Includes ORDER BY clause
var source = new PostgresSourceNode<MyRecord>(
connectionString,
"SELECT id, name, created_at FROM my_table ORDER BY id",
configuration: new PostgresConfiguration
{
CheckpointStrategy = CheckpointStrategy.Offset
}
);
Why This Matters
Checkpointing tracks the position of processed rows to enable recovery from failures. Without a consistent ORDER BY clause:
- Data Loss: Rows may be skipped during recovery
- Data Duplication: Rows may be processed multiple times
- Inconsistent State: Checkpoint positions become unreliable
Recommended Ordering Columns
Use a unique, monotonically increasing column such as:
id(primary key)created_at(timestamp)updated_at(timestamp)timestamp(timestamp column)- Any auto-incrementing or sequential column
Configuration
This analyzer is automatically enabled when the package is referenced. No additional configuration is required.
Scope
This analyzer only applies to:
PostgresSourceNode<T>instantiations- Queries with checkpointing enabled (any strategy except
CheckpointStrategy.None) - String literal queries (not interpolated strings or dynamic queries)
Related Documentation
License
MIT License - see LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.