Мое требование - создать новую базу данных, когда пользователь создает новую компанию из панели администратора. Я использую asp.net mvc и fluent migrator для создания таблиц. Однако изначально мне нужно создать базу данных на основе ввода, предоставленного администратором в форме «Добавить новую компанию». Создаваемая база данных будет в postgresql v9.5.
Можем ли мы создать базу данных в postgresql с помощью беглого миграции в C#
Ответы (1)
В прошлом у меня были аналогичные требования, я провел некоторое исследование, но для создания новой базы данных мне не удалось использовать fluentmigrator. Для создания таблиц и индексов с помощью Fluentmigrator сработало отлично. Итак, я решил создать его с помощью С# без fluentmigrator, как показано ниже.
Я использовал пакет NpgSQL nuget, я создал функцию ниже, чтобы проверить, существует ли база данных. если этого нет, то нужно создать новый
для создания и проверки базы данных, существует она или нет, вам необходимо подключиться к базе данных "postgres" с помощью объекта NpgsqlConnection
public static bool DBExists(string connectionStr, string dbname)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStr))
{
string sql = $"SELECT DATNAME FROM pg_catalog.pg_database WHERE DATNAME = '{dbname}'";
using (NpgsqlCommand command = new NpgsqlCommand
(sql, conn))
{
try
{
conn.Open();
var i = command.ExecuteScalar();
conn.Close();
if (i != null && i.ToString().Equals(dbname)) //always 'true' (if it exists) or 'null' (if it doesn't)
return true;
else return false;
}
catch (Exception e) {
Console.WriteLine(e.ToString());
return false;
}
}
}
}
Для создания базы данных вы можете выполнить ExecuteNonQuery для NpgsqlCommand с объектом NpgsqlConnection, подключенным к базе данных postgres.
string sql = "CREATE DATABASE \"dbname\" WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;";
для моих требований мне также нужно было создать расширение, которое я смог создать, используя запрос ниже
string sql = "CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;";
Я надеюсь, это поможет.