#c# #postgresql #.net-core #marten
Вопрос:
Я хотел бы, чтобы Мартен создал базу данных, если она не существует, при настройке моего хранилища событий. Я нашел в документации, что мне нужно использовать следующий фрагмент кода для такого поведения:
services
.AddSingleton<IDocumentStore>(DocumentStore.For(options =>
{
options.Connection(connectionString);
options.DatabaseSchemaName = schemaName;
options.Serializer(GetCustomJsonSerializer());
options.CreateDatabasesForTenants(databaseConfig =>
{
databaseConfig
.MaintenanceDatabase(connectionString)
.ForTenant()
.CheckAgainstPgDatabase()
.WithOwner(eventStoreSettings.DatabaseOwner)
.WithEncoding(eventStoreSettings.Encoding)
.ConnectionLimit(eventStoreSettings.ConnectionLimit);
});
}));
В документации говорится: «Если попытка подключения приводит к ошибке недопустимого каталога (3D000), запускается создание базы данных».. Прикрепленный код действительно приводит к упомянутой ошибке (3D000), но вместо запуска создания базы данных я получаю следующее необработанное исключение: «Исключение Npgsql.PostgresException (0x80004005): 3D000: база данных «UserDatabase1″ не существует
в Npgsql.NpgsqlConnector». Права пользователя, используемые в строке подключения, указаны правильно. Как использовать Marten для создания базы данных, если она не существует? Что я делаю не так?
Ответ №1:
Строка MaintenanceDatabase
подключения должна отличаться от строки подключения к хранилищу данных marten. Обратите MaintenanceDatabase
внимание, что для работы подключения необходимо разрешение на создание базы данных. Просто используйте корневого пользователя без какой-либо базы данных, это должно сработать. Например:
"Host=localhost;Username=sa;Password=Pass@word"