Добрый день
версия postgreSQL - 8.4.17
При использовании PgDump (v4.2.6) в D2006 сделал для себя изменения в модуле PgDump.pas:
1) procedure TPgDumpProcessor.BackupTables
Код: Выделить всё
Add(Format('DROP TABLE IF EXISTS %s CASCADE;', [TableName])); // <-- Добавил
Add(Format('CREATE TABLE %s (', [TableName]));
2) procedure TPgDumpProcessor.BackupSequences
Код: Выделить всё
Add(Format('DROP SEQUENCE IF EXISTS %s;', [SeqName])); // <-- Добавил
Sql := 'CREATE SEQUENCE ' + SeqName;
3) procedure TPgDumpProcessor.BackupConstraints
Код: Выделить всё
// 8.4.17 ругается, если такой нет, а "IF EXISTS" написать нельзя...
Add(Format('ALTER TABLE %s DROP CONSTRAINT %s;', [TableName, ConName])); // <-- Добавил
4) procedure TPgDumpProcessor.BackupIndexes;
Код: Выделить всё
var
indName: string; // <-- Добавил
begin
FQuery.SQL.Text :=
'SELECT n.nspname, pg_get_indexdef(c.oid), c.relname ' + // <-- Добавил
...
indName := VarToStr(FQuery.Fields[2].Value); // <-- Добавил
indName := QuoteName(indName); // <-- Добавил
...
Add(Format('DROP INDEX IF EXISTS %s;', [indName])); // <-- Добавил
триггеров, views и тп нет в базе пока что...
Зачем сделано?
Пользователь время от времени делает бакап базы, причем не всей а рабочих таблиц без статичных классификаторов..
в программе это примерно так:
Код: Выделить всё
PgDump1.Connection := DM.PgConnection1;
PgDump1.OnBackupProgress := PgDumpBackupProgress;
PgDump1.TableNames := 'table1;table2;table3;';
PgDump1.Options.CompleteInsert := True;
PgDump1.SQL.Clear;
PgDump1.BackupToFile('c:\bak');
затем, работая с базой, решает восстановить из сохраненной ранее копии. т.е. откатиться на несколько дней назад..
в программе это вот так примерно:
плюс обработчик ошибок при восстановлении
Код: Выделить всё
procedure TfrmPG.PgDump1Error(Sender: TObject; E: Exception; SQL: string; var Action: TErrorAction);
begin
Action := eaContinue;
end;
Без моих изменений по предварительному удалению Tables, Sequences, Indexes, и Constraints
после восстановления добавление новых записей не работает как надо. последовательности возвращают повторяющиеся значения, Constraints ругаются на повторы.. в общем, каша
Что не так?