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);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";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);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 CreateGenerating 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;