Skip to content

Sequences

The Sequence class represents a PostgreSQL sequence as a managed schema object.

Creating a Sequence

cs
// Basic sequence
var sequence = new Sequence("public.order_number_seq");

// Sequence with a start value
var sequenceWithStart = new Sequence(
    new DbObjectName("public", "invoice_seq"),
    startWith: 1000);

snippet source | anchor

Owned Sequences

A sequence can be owned by a table column. When the owning table is dropped, the sequence is automatically dropped as well.

cs
var sequence = new Sequence("public.order_number_seq");
sequence.Owner = new DbObjectName("public", "orders");
sequence.OwnerColumn = "order_number";

snippet source | anchor

This generates:

sql
CREATE SEQUENCE public.order_number_seq;
ALTER SEQUENCE public.order_number_seq OWNED BY public.orders.order_number;

Using with Table Columns

Combine sequences with table column defaults:

cs
var sequence = new Sequence(
    new DbObjectName("public", "order_number_seq"),
    startWith: 1000);

var table = new Table("orders");
table.AddColumn<int>("id").AsPrimaryKey();
table.AddColumn<long>("order_number")
    .DefaultValueFromSequence(sequence);

snippet source | anchor

Delta Detection

Weasel checks whether the sequence exists in the database by querying information_schema.sequences. If missing, it returns a Create delta.

cs
var dataSource = new NpgsqlDataSourceBuilder("Host=localhost;Database=mydb").Build();
var sequence = new Sequence("public.order_number_seq");

await using var conn = dataSource.CreateConnection();
await conn.OpenAsync();

var delta = await sequence.FindDeltaAsync(conn);
// delta.Difference: None or Create

snippet source | anchor

Generating DDL

cs
var sequence = new Sequence("public.order_number_seq");

var migrator = new PostgresqlMigrator();
var writer = new StringWriter();

sequence.WriteCreateStatement(migrator, writer);
// CREATE SEQUENCE public.order_number_seq START 1000;

sequence.WriteDropStatement(migrator, writer);
// DROP SEQUENCE IF EXISTS public.order_number_seq;

snippet source | anchor

Released under the MIT License.