private void BuildCreateTypesNotInTarget(StringBuilder sb) { var header = false; foreach (var typeKey in sourceTypes.Keys.Where(k => !targetTypes.Keys.Contains(k))) { if (!header) { AddComment(sb, "#region CREATE NON EXISTING TYPES"); header = true; } var item = sourceTypes[typeKey]; var content = new TypeDumpTransformer(item, SourceLines).BuildLines(ignorePrepend: true); sb.AppendLine(content.ToString()); } if (header) { AddComment(sb, "#endregion CREATE NON EXISTING TYPES"); } }
public IEnumerable <(string name, string content, PgType type, string schema)> GetDatabaseObjects() { var args = string.Concat( baseArg, " --schema-only", settings.DbObjectsOwners ? "" : " --no-owner", settings.DbObjectsPrivileges ? "" : " --no-acl", settings.DbObjectsDropIfExists ? " --clean --if-exists" : ""); foreach (var table in Connection.GetTables(settings)) { var name = table.GetFileName(); string content = null; try { #pragma warning disable CS8509 content = table.Type switch #pragma warning restore CS8509 { PgType.Table => GetTableContent(table, args), PgType.View => GetViewContent(table, args) }; } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not write dump file {name}", $"ERROR: {e.Message}"); continue; } yield return(name, content, table.Type, table.Schema); } foreach (var seq in Connection.GetSequences(settings)) { var name = seq.GetFileName(); string content; try { content = GetSeqContent(seq, args); } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not write dump file {name}", $"ERROR: {e.Message}"); continue; } yield return(name, content, seq.Type, seq.Schema); } List <string> lines = null; List <PgItem> types = new(); try { lines = GetDumpLines(args, excludeTables, out types); } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not create pg_dump for functions and procedures", $"ERROR: {e.Message}"); } if (lines != null) { foreach (var routine in Connection.GetRoutines(settings)) { var name = routine.GetFileName(); string content; try { content = new RoutineDumpTransformer(routine, lines) .BuildLines(dbObjectsCreateOrReplace: settings.DbObjectsCreateOrReplace) .ToString(); } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not write dump file {name}", $"ERROR: {e.Message}"); continue; } yield return(name, content, routine.Type, routine.Schema); } foreach (var domain in Connection.GetDomains(settings)) { var name = domain.GetFileName(); string content; try { content = new DomainDumpTransformer(domain, lines) .BuildLines() .ToString(); } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not write dump file {name}", $"ERROR: {e.Message}"); continue; } yield return(name, content, domain.Type, domain.Schema); } foreach (var type in Connection.FilterTypes(types, settings)) { var name = type.GetFileName(); string content; try { content = new TypeDumpTransformer(type, lines) .BuildLines() .ToString(); } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not write dump file {name}", $"ERROR: {e.Message}"); continue; } yield return(name, content, type.Type, type.Schema); } foreach (var schema in Connection.GetSchemas(settings)) { if (string.Equals(schema, "public")) { continue; } var name = $"{schema}.sql"; string content; try { content = new SchemaDumpTransformer(schema, lines) .BuildLines() .ToString(); } catch (Exception e) { Program.WriteLine(ConsoleColor.Red, $"Could not write dump file {name}", $"ERROR: {e.Message}"); continue; } yield return(name, content, PgType.Schema, null); } } }