Вход | Регистрация


Информационные технологии ::

Метки: 

PostgreSQL 9.4 - ошибка при выполнении pg_dump -- ftell used

Я
   2dolist
 
19.10.17 - 10:20
Добрый день. При выполнении pg_dump.exe начала возникать ошибка:
pg_dump: [cumsom archiver] WARNING: ftell mismatch with expected position -- ftell used.

Архивы выполняются вызовом батника с кодом:
cd "путь к pg_dump.exe"
.\pg_dump.exe -Fc -h АдресСервера -U юзер постгреса -c ut11_3test > АдресДляДампа

Обнаружил, что некоторое время штампуются невосстанавливаемые архивы, хотя до этого при настройке они работали отменно.

При попытке восстановить файл дампа через pg_restore.exe выдаётся ошибка:
pg_restore: [archiver] input file does not appear to be a valid archive

Всё, что нашёл по ошибке ftell это то, что проблема возникала на 8-й версии и советуют обновиться до 9. У нас 9.4 и до недавнего времени всё работало.
 
 
   novichok79
 
1 - 19.10.17 - 10:27
может быть обновить postgre до 9.6? в своих логах постгри чего-нибудь пишет?
   novichok79
 
2 - 19.10.17 - 10:31
еще пишут что если в команде используется pipe notation (очевидно вертикальная палка), то ошибка появляется на Windows, в Linux'ах все норм.
   2dolist
 
3 - 19.10.17 - 10:35
ошибок в логах по этому поводу нет. pipe notation-ов тоже не используем
   novichok79
 
4 - 19.10.17 - 10:36
а если вместо этого

pg_dump.exe -Fc -h АдресСервера -U юзер постгреса -c ut11_3test > АдресДляДампа

использовать

pg_dump.exe -Fc -h АдресСервера -U юзер постгреса -c ut11_3test -f АдресДляДампа
?

места на диске для дампов хватает?
   novichok79
 
5 - 19.10.17 - 10:37
какой размер дамп файла кстати? у меня 20 гигов восстанавливается нормально из кастомного формата postgre.
   2dolist
 
6 - 19.10.17 - 10:37
места хватает, -f регается, что нельзя типа
размер дампа небольшой - порядка 2 гигов
   novichok79
 
7 - 19.10.17 - 10:39
ну вот с stackoverflow, тоже что и я посоветовал

I found several bug reports indicating that pg_dump has problems writing to a pipe on Windows:

BUG #7794: pg_dump: errors when using pipes/streams
https://www.postgresql.org/message-id/E1TrwXG-0005p0-Vb@wrigleys.postgresql.org

BUG #6726: pg_dump - ftell mismatch when using -Fc and split
https://www.postgresql.org/message-id/E1SowQw-0003mq-SL@wrigleys.postgresql.org

Instead of writing to stdout and redirecting to a file, try using -f specify the output file:

pg_dump -Fc -U "username" -w "dbname" -f "filename".dmp
   novichok79
 
8 - 19.10.17 - 10:40
(6) а что пишет?
может быть попробовать выгружать в другой формат?
   2dolist
 
9 - 19.10.17 - 10:41
если -f, то пишет, что too many command-line arguements
   2dolist
 
10 - 19.10.17 - 10:41
(8) форматы для pg_restore - это Fc (какая-то своя кодировка уже слегка заархивированная) и Fd (дистрибутив). Пробовал и то, и то - одинаково.
 
 Рекламное место пустует
   novichok79
 
11 - 19.10.17 - 10:44
(10) попробуй параметры писать с двумя тире,
у меня для дампов прописано следующее в батнике

REM Создание резервной копии
CALL "%PGBIN%\pg_dump.exe" --format=custom --compress=9 --jobs=%THREADSAMOUNT% --verbose --file=%DUMPPATH% 2> %LOGPATH%

работает как часы уже год.
   novichok79
 
12 - 19.10.17 - 10:44
Fc, это ведь тоже самое что и --format=custom, по-моему.
   2dolist
 
13 - 19.10.17 - 10:46
ага, идентично
   novichok79
 
14 - 19.10.17 - 10:48
(13) результат такой же?
   2dolist
 
15 - 19.10.17 - 10:48
после dumppath 2 это что?
   2dolist
 
16 - 19.10.17 - 10:52
а где у тебя указано с какой базы делать дамп?
   2dolist
 
17 - 19.10.17 - 10:53
ругается на CALL
   novichok79
 
18 - 19.10.17 - 10:54
(15) это чтобы stdout шел в лог файл
(16) в переменной среды
(17) потому что это вызов из bat файла
   novichok79
 
19 - 19.10.17 - 10:57
я бы делал так

pg_dump.exe --dbname=baza --format=custom --compress=9 --jobs=4 --host=superkomputer --port=5432 --username=postgres --password --verbose --file="C:\В гостях у сказки\дамп_2017_10_19.backup" 2> "C:\В гостях у сказки\дамп_2017_10_19.log"
   novichok79
 
20 - 19.10.17 - 10:59
батник примерно такой

CLS
ECHO OFF
REM Установка кодовой страницы Win1251
CHCP 1251

REM Установка переменных окружения
REM Для сервера поменять переменные
SET PGBIN=C:\Program Files\PostgresPro 1C\9.4\bin\
SET PGHOST=......
SET PGPORT=......
SET PGUSER=......
SET PGPASSWORD=.....
SET PGDATABASE=%1

IF '%PGDATABASE%'=='' (ECHO The database name is not specified & GOTO End)

REM Установка путей копирования
REM Для сервера установить D:\Backup\
SET STAGINGDIRECTORY=%TEMP%
SET BACKUPDIRECTORY=D:\Backup\

REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2% %TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET DUMPFILE=%PGDATABASE%_%DATETIME%.backup
SET LOGFILE=%PGDATABASE%_%DATETIME%.log

IF NOT EXIST "%STAGINGDIRECTORY%" MD "%STAGINGDIRECTORY%"
IF NOT EXIST "%BACKUPDIRECTORY%" MD "%BACKUPDIRECTORY%"

REM Смена диска и переход во временную папку
CD /d %STAGINGDIRECTORY%

SET DUMPPATH="%STAGINGDIRECTORY%\%DUMPFILE%"
SET LOGPATH="%STAGINGDIRECTORY%\%LOGFILE%"
SET FINALDUMPPATH="%BACKUPDIRECTORY%\%DUMPFILE%"
SET FINALLOGPATH="%BACKUPDIRECTORY%\%LOGFILE%"

REM Создание резервной копии
CALL "%PGBIN%\pg_dump.exe" --format=custom --compress=9 --jobs=%THREADSAMOUNT% --verbose --file=%DUMPPATH% 2> %LOGPATH%

REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull

REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %DUMPPATH%
ECHO %DATETIME%: Errors when creating a database backup %DUMPFILE%. >> %LOGPATH%
ECHO %DATETIME%: See the report %LOGFILE%. >> %LOGPATH%
GOTO End

REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATETIME%: The backup %DUMPFILE% has been successfully created. >> %LOGPATH%
ECHO F| XCOPY %DUMPPATH% %FINALDUMPPATH% /I /H /R /Y
ECHO F| XCOPY %LOGPATH% %FINALLOGPATH% /I /H /R /Y
DEL %DUMPPATH%
DEL %LOGPATH%
GOTO End

REM Выходим из батника
:End
   novichok79
 
21 - 19.10.17 - 11:03
SET THREADSAMOUNT=%2
не забудь установить переменную, иначе руганется
забыл дописать когда пароли затирал
   2dolist
 
22 - 19.10.17 - 11:07
решили пойти методом деконструкции, так сказать. Начать с самого простого.

в общем, ошибка в формате - если убрать формат Fc, то дамп делается (правда, в формате .sql).
   2dolist
 
23 - 19.10.17 - 11:09
не совсем понятно как лучше поступить и почему внезапно начал тупить формат custom и distributive
   arsik
 
24 - 19.10.17 - 11:10
(23) Антивирь?
   novichok79
 
25 - 19.10.17 - 11:19
(22) я использовал длинные параметры, именно по той причине, что сначала Fc у меня тоже тупил.
   2dolist
 
26 - 19.10.17 - 11:21
(20) нехило! курить надо это. А какая версия postgre?
   2dolist
 
27 - 19.10.17 - 11:23
ещё проблема что если запускать батником, а ни из командной строки, то создаётся файл 0 размера. Т.е. по какой-то причине не пишется. Блин, тут права чтоль поменялись...
   novichok79
 
28 - 19.10.17 - 11:23
(26) я писал сам. чего там "курить"? все просто - делается дамп во временный каталог на системном SSD диске сервера, потом полученный файл копируется на диск для дампов, вместе с логом.
   novichok79
 
29 - 19.10.17 - 11:25
(26) 9.4.10 для Windows x64 с сайта postgrespro.ru
   novichok79
 
30 - 19.10.17 - 11:27
   2dolist
 
31 - 19.10.17 - 11:30
(28) у нас 9.4.2-1С
   novichok79
 
32 - 19.10.17 - 11:36
(31) отлично, я планирую с обновлением платформы на 8.3.10 поставить 9.6, с сайта 1С.
   2dolist
 
33 - 19.10.17 - 11:45
пока норм работает платформа - уже обновили
 
 
   2dolist
 
34 - 19.10.17 - 11:57
(32) а если просто у тебя запустить строку
   2dolist
 
35 - 19.10.17 - 11:58
%PGBIN%\pg_dump.exe --format=custom --compress=9 --file=%DUMPPATH% > %LOGPATH%

отработает?
   2dolist
 
36 - 19.10.17 - 11:59
ну, вручную заданными параметрами естественно. Я просто хочу узнать, у тебя --format=custom отрабатывает или нет без всяких обозначений переменных среды.
   novichok79
 
37 - 19.10.17 - 12:06
(35) да, отработает. я уже писал выше, как я оформил бы вызов pg_dump без указания переменных среды.
   novichok79
 
38 - 19.10.17 - 12:07
(36) тоже писал: батник работает уже год.
   novichok79
 
39 - 19.10.17 - 12:09
(34) просто запусти батник, который я тебе дал, и проверь сам.
   ansh15
 
40 - 19.10.17 - 12:11
(19) --jobs хороший параметр, но его можно использовать только с форматом вывода directory, то есть --format=directory.
https://postgrespro.ru/docs/postgrespro/9.6/app-pgdump
(0)Попробуй, когда-то проверял в PowerShell
& 'C:\Program Files\PostgresPro 1C\9.6\bin\pg_dump.exe' "-Fc" "-b" "-fC:\pgsql\bench.bak" "bench"
& 'C:\Program Files\PostgresPro 1C\9.6\bin\pg_restore.exe' "-dbench" "C:\pgsql\bench.bak"
База bench должна быть вновь созданной.
Так работает.
   2dolist
 
41 - 19.10.17 - 12:22
а дамп, который в формате sql не удаётся восстановить через psql.

Вообще какая-то засада и нихрена не понятно. Почему fc перестал работать.

Попробовали выгрузить в архив с форматом tar, он пгрестором не цепляется - говорит формат не тот.
   2dolist
 
42 - 19.10.17 - 12:23
хотя, на винде мб тар и не пойдёт
   novichok79
 
43 - 19.10.17 - 12:25
(40) я да запамятовал, что он только при восстановлении может дать газу. а бэкап только без него делается, если в кастом формате.
(41) просто вызови pg_dump с ключом --format=custom, дальнейшеий диалог не имеет смысла, пока ты этого не сделаешь.
   ansh15
 
44 - 19.10.17 - 12:27
Вот и ответ
"I suspect that what's happening is that stdout isn't getting put into
binary mode, so that Microsoft's CR/NL translation corrupts the data.
If that's true, though, the resulting backup file should be corrupt"
Отсюда https://www.postgresql.org/message-id/23854.1446474615%40sss.pgh.pa.us
   2dolist
 
45 - 19.10.17 - 12:39
(43) просто вызови pg_dump с ключом --format=custom

так изначально так и было. -Fc это прямой аналог --format custom.

он выдаёт
pg_dump: [cumsom archiver] WARNING: ftell mismatch with expected position -- ftell used.
   Йохохо
 
46 - 19.10.17 - 12:45
(45) нельзя в произвольном порядке комбинировать старую и новую нотации, перепиши все в новой с учетом (44)
   2dolist
 
47 - 19.10.17 - 13:21
(46) у меня не работают обозначения через --format
попробовал запустить
"адрес\pg_dump.exe" --format=custom --verbose --file="куда ставить"

не отработало - ругается на format=custom - неопределенная лексема
   2dolist
 
48 - 19.10.17 - 13:23
(46) в 44 просто сказано не использовать |
И нак не используем
   2dolist
 
49 - 19.10.17 - 13:51
Нет больше идей как оживить custom archiver? Уже появляется желание снести и переустановить просто постгрешку.
 
 Рекламное место пустует
   novichok79
 
50 - 19.10.17 - 15:12
(49) у меня все норм, покажи полностью что пишешь
   2dolist
 
51 - 19.10.17 - 15:16
В общем, в командной строке нормально отрабатывает таким образом:

cd "адрес\PostgreSQL\9.4.2-1.1C\bin"
.\pg_dump.exe --host АдресХоста --port 5432 --username "postgres" --пасс --format custom --verbose --file "АдресКудаСкидыватьАрхивчик" "ut11_3test"

Осталось запустить это в батнике, а то просто так не отрабатывает
   novichok79
 
52 - 19.10.17 - 15:31
(51) я еще равно обычно после параметров ставлю. но если так работает, то норм.
   2dolist
 
53 - 19.10.17 - 15:35
(52) сейчас пробую твой батничек развернуть. Вопрос есть. А Зачем нам нужна промежуточная директория, из которой потом всё равно перекачиваем в конечную?
   novichok79
 
54 - 19.10.17 - 15:46
(53) промежуточная директория на SSD диске, а конечная - на обычном HDD. это нужно для скорости.
   2dolist
 
55 - 19.10.17 - 15:52
(54) хитро.
Не взлетает что-то батничек. Подозреваю, что с кодировкой дело. выполнение команды chcp уже не отрабатывает даже.
   2dolist
 
56 - 19.10.17 - 16:18
Спасибо большое novichok79! взял за основу батник из (20), переписал его и всё взлетело.

Но такой момент. Многопоточная архивация недоступна для формата custom. Пришлось её отменить.
   novichok79
 
57 - 20.10.17 - 08:39
(56) был рад помочь.
   novichok79
 
58 - 20.10.17 - 08:41
(57) был бы еще более рад, если бы мне на яндекс-кошелек упало чуть-чуть денежек ))))
   2dolist
 
59 - 23.10.17 - 10:36
(58) так данные нужны чтоб скинуть!
   novichok79
 
60 - 23.10.17 - 15:54
(59) отлично, написал на stupidboxx@mail.ru с ****oleg@gmail.com
   2dolist
 
61 - 25.10.17 - 09:15
отблагодарил
   novichok79
 
62 - 25.10.17 - 10:02
(61) получил, спасибо, очень приятно.



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует