Skip to content

mkraft/entxbulk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Entxbulk

Adds a BulkUpdate method to Ent schema clients to perform multiple Postgres record updates with a single query.

Example

Ent client interactions

client.User.BulkUpdate(ctx, []ent.UserBulkUpdate{
	{
		ID:        13,
		HubspotId: api.ToPtr("abc123"),
	},
	{
		ID:        14,
		HubspotId: api.ToPtr("xyz789"),
	},
})

Executed SQL example

UPDATE users
SET hubspot_id = data.hubspot_id
FROM (VALUES ($1::bigint, $2), ($3::bigint, $4)) AS data(id, hubspot_id)
WHERE users.id = data.id;

Configuration

In entc.go

bulkUpdateExtension := entxbulk.NewExtension()
if err := entc.Generate("../ent/schema", &gen.Config{}, entc.Extensions(bulkUpdateExtension)); err != nil {
	panic(err)
}

For a configuration with custom data type mappings do something like

entxbulk.NewExtension(
	entxbulk.WithTypeCasts(map[string]string{
		"time.Time":        "timestamptz",
		"*pgtype.Interval": "interval",
		"int":              "bigint",
	}),
	entxbulk.WithGoTypes(map[string]string{
		"interval":    "*pgtype.Interval",
		"timestamptz": "time.Time",
		"bigint":      "int",
	}),
)

About

An Entgo extension for Postgres bulk updates.

Resources

Stars

Watchers

Forks

Languages