Найдено 11 результатов

aBourg
Чт 13 ноя 2014 20:43
Форум: PostgreSQL Data Access Components
Тема: Ошибка при использовании PgDump
Ответы: 10
Просмотры: 16553

Re: Ошибка при использовании PgDump

Alexp писал(а):... Мы планируем полный рефакторинг PgDump,....
Добрый день!
Если ли новости о рефакторинге?

У себя, кстати, пришлось добавить "CASCADE":

Код: Выделить всё

Add(Format('DROP SEQUENCE IF EXISTS %s CASCADE;', [SeqName]));
т.к. поле может быть описано не как serial, а, к примеру, так:

Код: Выделить всё

... DEFAULT nextval('mytable_id_seq'::regclass);
aBourg
Чт 02 окт 2014 17:38
Форум: PostgreSQL Data Access Components
Тема: Ошибка при использовании PgDump
Ответы: 10
Просмотры: 16553

Re: Ошибка при использовании PgDump

Добрый день!

Сегодня установил версию PgDAC Version 4.4.11 (01-Oct-2014)
в history.html написано:
Backup of huge BLOB-fields with TPgDump is fixed
Нет. к сожалению, не решены.
пришлось опять в файле PgServices.pas (строка 631) писать

Код: Выделить всё

  xBool := (Query.Fields[i].FieldName <> 'binarycontext'); // поле с типом bytea
  Sql := Sql + TPgTextConverter.ValueToText(Query.Fields[i].Value, dtString, dtString, False, xBool, False, .....
Бакап создался, но не востанавливается по причине опять же Out of memory
Записей в таблице - 97 всего
Файл с полученным sql-файлом этой таблицы могу отправить любым удобным Вам способом.
размер rar-архива 65 метров ( в развернутом 556M)
aBourg
Вт 16 сен 2014 16:38
Форум: PostgreSQL Data Access Components
Тема: Ошибка при использовании PgDump
Ответы: 10
Просмотры: 16553

Re: Ошибка при использовании PgDump

AndreyZ писал(а):Спасибо за информацию. Мы будем исследовать это поведение и сообщим вам о полученных результатах.
Добрый день!

В версии PgDAC 4.4 от 15.09 проблемы, описанные выше, не решены еще?
aBourg
Вс 07 сен 2014 09:04
Форум: PostgreSQL Data Access Components
Тема: Ошибка при использовании PgDump
Ответы: 10
Просмотры: 16553

Re: Ошибка при использовании PgDump

Добрый день!
Имеем
PgDAC 4.3.9, PostgreSql 8.4.17, Delphi XE2, приложение Win32

Еще проблема с PgDump

есть поле в таблице с типом bytea - содержимое файла хранится...
Файлы большие - это и jpg, и tiff, и pdf и тп.
В поле примерно это выглядит вот так (PgAdmin III показывает):
"\377\330\377\340\000\020JFIF\000\001\001\001\001,\001,\000\000\377\333\000C\000\010\006\006\007\006\005\010\007\007\007\011\011\010\012\014\024\015\014\013\013\014\031\022\023\017\024\035\032\037\036\035\032\034\034 ..... и т.д. ....."

При создании резервной копии

Код: Выделить всё

PgDump1.Connection := DM.PgConnection1;
PgDump1.OnBackupProgress := PgDumpBackupProgress;
PgDump1.TableNames := 'тут таблица с полем [b]bytea[/b]';
PgDump1.Options.CompleteInsert := True;
PgDump1.SQL.Clear;
PgDump1.BackupToFile('c:\bak');
имеем ошибку "Out of Memory" - программа реально съедает всю имеющуюся память
в коде библиотеки
PgServices.pas (строка 638)

Код: Выделить всё

TPgTextConverter.ValueToText(Query.Fields[i].Value, dtString, dtString, False, [b]True[/b], False ..
вызывает в дальнейшем из PgClasses.pas ( строка 3628)

Код: Выделить всё

class function TPgTextConverter.ValueToText 
и попадаем для поля типа bytea всегда сюда - строка 3786

Код: Выделить всё

Result := EscapeString(Result, Quote, DataType = dtBlob, LoaderQuote, EscapeSign);
ну а дальше понятно, что StringBuilder съедает всю память своими Append

Что я сделал?
Для этого поля вызываю
TPgTextConverter.ValueToText(Query.Fields.Value, dtString, dtString, False, False, False.....
и в итоге вываливаюсь из функции EscapeString в строке 3152 модуля PgClasses.pas

Что не так и как можно исправить данную ошибку, не прибегая к махинациями с вызовом ValueToText в зависимости от имени поля...


Но в результате восстановления из такой резервной копии опять же имеем Out of Memory
в TParser.CopyText ( CRParser.pas строка 1333 )
:?: :?: :?:
aBourg
Вс 08 июн 2014 08:33
Форум: PostgreSQL Data Access Components
Тема: Ошибка при использовании PgDump
Ответы: 10
Просмотры: 16553

Re: Ошибка при использовании PgDump

Добрый день
версия 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');
затем, работая с базой, решает восстановить из сохраненной ранее копии. т.е. откатиться на несколько дней назад..
в программе это вот так примерно:

Код: Выделить всё

PgDump1.RestoreFromFile('c:\bak');
плюс обработчик ошибок при восстановлении

Код: Выделить всё

procedure TfrmPG.PgDump1Error(Sender: TObject; E: Exception; SQL: string; var Action: TErrorAction);
begin
Action := eaContinue;
end;
Без моих изменений по предварительному удалению Tables, Sequences, Indexes, и Constraints
после восстановления добавление новых записей не работает как надо. последовательности возвращают повторяющиеся значения, Constraints ругаются на повторы.. в общем, каша

Что не так?
aBourg
Пн 30 дек 2013 15:24
Форум: PostgreSQL Data Access Components
Тема: Ошибка при использовании PgDump
Ответы: 10
Просмотры: 16553

Ошибка при использовании PgDump

Добрый день!
поставил новую версию 4.2.5 под D2006
теперь ошибка при выполнении

Код: Выделить всё

PgDump1.Connection := DM.PgConnection1;
PgDump1.OnBackupProgress := PgDumpBackupProgress;
PgDump1.TableNames := 'table1;table2;table3;';
PgDump1.Options.CompleteInsert := True;
PgDump1.SQL.Clear;
PgDump1.BackupToFile('c:\bak');
текст ошибки: 'column "enumsortorder" does not exist'
возникает в модуле PgDump.pas в строке 563

свойства PgDump - по-умолчанию
версия postgreSQL - 8.4.17
aBourg
Ср 25 сен 2013 04:42
Форум: PostgreSQL Data Access Components
Тема: pgDAC Features
Ответы: 5
Просмотры: 14930

Re: pgDAC Features

Вот я и говорю, что заявленное "Ability to search for installed PostgreSQL Server databases.." не соответствует действительности
aBourg
Чт 12 сен 2013 06:42
Форум: PostgreSQL Data Access Components
Тема: pgDAC Features
Ответы: 5
Просмотры: 14930

Re: pgDAC Features

Добрый день!
спасибо за подсказку, но это неинтересно..
Получить список ПК в локальной сети через NetServerEnum - это не то, что хотелось увидеть.
Думал, что будет что-то, по типу опроса при ServerType = SV_TYPE_SQLSERVER, но только для PostgreSQL...
aBourg
Вт 10 сен 2013 14:46
Форум: PostgreSQL Data Access Components
Тема: pgDAC Features
Ответы: 5
Просмотры: 14930

pgDAC Features

На странице, посвященной PgDAC в разделе "Network and connectivity"
есть "Ability to search for installed PostgreSQL Server databases in a local network"

где посмотреть пример реализации этой возможности?
aBourg
Ср 28 авг 2013 12:39
Форум: PostgreSQL Data Access Components
Тема: PgDump проблема
Ответы: 2
Просмотры: 10056

Re: PgDump проблема

Спасибо за ответ
приобрел 1,5 недели назад только PgDac
меня смутило имя 'AddDrop'...
посмотрел в исходник DADump.pas, а там так и есть:

Код: Выделить всё

    if FOwner.Options.AddDrop then
      Add('DELETE FROM ' + TblName + ';');
жаль, такая удобная возможность была бы сразу и бакапить нужные таблицы базы, исключая всякие постоянные справочники/классификаторы и в любое время восстанавливать данные за нужную дату. и все это красиво визуально оформлено для конечного пользователя

ну а теперь все ручками самому и/или через psql + libpq.dll

ждем развития функциональности PgDump
aBourg
Ср 28 авг 2013 08:54
Форум: PostgreSQL Data Access Components
Тема: PgDump проблема
Ответы: 2
Просмотры: 10056

PgDump проблема

Добрый день!

Все настройки у PgDump1 по-умолчанию. ( Options.AddDrop := True; )

Код: Выделить всё

PgDump1.BackupToFile('c:\bak.sql');
В результирующем файле отсутствуют команды DROP
ожидалось увидеть хотя бы 'DROP TABLE IF EXISTS <моя таблица> CASCADE'

в итоге имеем ошибки при выполнении

Код: Выделить всё

PgDump1.RestoreFromFile('c:\bak.sql');
т.к. и таблицы такие уже есть и sequence и индексы...

как это побороть?

p.s.
-- PgDAC version: 4.0.2
-- PostgreSQL server version: 8.4.17
-- PostgreSQL client version: Direct