From 6e99f1c0578df874bbe73339cd0e93f7cac83f2a Mon Sep 17 00:00:00 2001 From: pavel Date: Thu, 14 May 2026 22:29:28 +0200 Subject: [PATCH] db prov --- internal/app/db_provisioning.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/internal/app/db_provisioning.go b/internal/app/db_provisioning.go index 31c8d93..2535841 100644 --- a/internal/app/db_provisioning.go +++ b/internal/app/db_provisioning.go @@ -46,13 +46,14 @@ END $$;`, sqlQuoteLiteral(p.DBUser), sqlQuoteIdent(p.DBUser), sqlQuoteLiteral(p. return fmt.Errorf("create/alter role failed: %w", err) } - if _, err := adminDB.ExecContext(ctx, fmt.Sprintf(`DO $$ -BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = %s) THEN - CREATE DATABASE %s OWNER %s; - END IF; -END $$;`, sqlQuoteLiteral(p.DBName), sqlQuoteIdent(p.DBName), sqlQuoteIdent(p.DBUser))); err != nil { - return fmt.Errorf("create database failed: %w", err) + var dbExists bool + if err := adminDB.QueryRowContext(ctx, `SELECT EXISTS (SELECT 1 FROM pg_database WHERE datname = $1)`, p.DBName).Scan(&dbExists); err != nil { + return fmt.Errorf("check database existence failed: %w", err) + } + if !dbExists { + if _, err := adminDB.ExecContext(ctx, fmt.Sprintf(`CREATE DATABASE %s OWNER %s`, sqlQuoteIdent(p.DBName), sqlQuoteIdent(p.DBUser))); err != nil { + return fmt.Errorf("create database failed: %w", err) + } } if _, err := a.db.ExecContext(ctx, `UPDATE projects SET db_name=$1, db_user=$2, db_password=$3 WHERE id=$4`, p.DBName, p.DBUser, p.DBPassword, p.ID); err != nil {