From 574bd75670c817fc7e9abecf402effdd5fe12afe Mon Sep 17 00:00:00 2001 From: Shaun Davis Date: Fri, 6 Jan 2023 15:32:50 -0600 Subject: [PATCH] Adding admin functions that will set/unset readonly --- pkg/flypg/admin/admin.go | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pkg/flypg/admin/admin.go b/pkg/flypg/admin/admin.go index f48f8c84..c835353e 100644 --- a/pkg/flypg/admin/admin.go +++ b/pkg/flypg/admin/admin.go @@ -224,3 +224,45 @@ func SetConfigurationSetting(ctx context.Context, conn *pgx.Conn, key string, va _, err := conn.Exec(ctx, sql) return err } + +func SetReadOnly(ctx context.Context, conn *pgx.Conn) error { + databases, err := ListDatabases(ctx, conn) + if err != nil { + return err + } + + for _, db := range databases { + if db.Name == "repmgr" || db.Name == "postgres" { + continue + } + + sql := fmt.Sprintf("ALTER DATABASE %s set default_transaction_read_only = true;", db.Name) + _, err := conn.Exec(ctx, sql) + if err != nil { + return err + } + } + + return nil +} + +func UnsetReadOnly(ctx context.Context, conn *pgx.Conn) error { + databases, err := ListDatabases(ctx, conn) + if err != nil { + return err + } + + for _, db := range databases { + if db.Name == "repmgr" || db.Name == "postgres" { + continue + } + + sql := fmt.Sprintf("ALTER DATABASE %s set default_transaction_read_only = false;", db.Name) + _, err := conn.Exec(ctx, sql) + if err != nil { + return err + } + } + + return nil +}