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


#0 by 2dolist
Добрый день. При выполнении 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 и до недавнего времени всё работало.
#1 by novichok79
может быть обновить postgre до 9.6? в своих логах постгри чего-нибудь пишет?
#2 by novichok79
еще пишут что если в команде используется pipe notation (очевидно вертикальная палка), то ошибка появляется на Windows, в Linux'ах все норм.
#3 by 2dolist
ошибок в логах по этому поводу нет. pipe notation-ов тоже не используем
#4 by novichok79
а если вместо этого pg_dump.exe -Fc -h АдресСервера -U юзер постгреса -c ut11_3test > АдресДляДампа использовать pg_dump.exe -Fc -h АдресСервера -U юзер постгреса -c ut11_3test -f АдресДляДампа ? места на диске для дампов хватает?
#5 by novichok79
какой размер дамп файла кстати? у меня 20 гигов восстанавливается нормально из кастомного формата postgre.
#6 by 2dolist
места хватает, -f регается, что нельзя типа размер дампа небольшой - порядка 2 гигов
#7 by novichok79
ну вот с 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 BUG #6726: pg_dump - ftell mismatch when using -Fc and split 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
#8 by novichok79
а что пишет? может быть попробовать выгружать в другой формат?
#9 by 2dolist
если -f, то пишет, что too many command-line arguements
#10 by 2dolist
форматы для pg_restore - это Fc (какая-то своя кодировка уже слегка заархивированная) и Fd (дистрибутив). Пробовал и то, и то - одинаково.
#11 by novichok79
попробуй параметры писать с двумя тире, у меня для дампов прописано следующее в батнике REM Создание резервной копии CALL "%PGBIN%pg_dump.exe" --format=custom --compress=9 --jobs=%THREADSAMOUNT% --verbose --file=%DUMPPATH% 2> %LOGPATH% работает как часы уже год.
#12 by novichok79
Fc, это ведь тоже самое что и --format=custom, по-моему.
#13 by 2dolist
ага, идентично
#14 by novichok79
результат такой же?
#15 by 2dolist
после dumppath 2 это что?
#16 by 2dolist
а где у тебя указано с какой базы делать дамп?
#17 by 2dolist
ругается на CALL
#18 by novichok79
это чтобы stdout шел в лог файл в переменной среды потому что это вызов из bat файла
#19 by novichok79
я бы делал так 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"
#20 by novichok79
батник примерно такой CLS ECHO OFF REM Установка кодовой страницы Win1251 CHCP 1251 REM Установка переменных окружения REM Для сервера поменять переменные SET PGBIN=C:Program FilesPostgresPro 1C9.4in 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
#21 by novichok79
SET THREADSAMOUNT=%2 не забудь установить переменную, иначе руганется забыл дописать когда пароли затирал
#22 by 2dolist
решили пойти методом деконструкции, так сказать. Начать с самого простого. в общем, ошибка в формате - если убрать формат Fc, то дамп делается (правда, в формате .sql).
#23 by 2dolist
не совсем понятно как лучше поступить и почему внезапно начал тупить формат custom и distributive
#24 by arsik
Антивирь?
#25 by novichok79
я использовал длинные параметры, именно по той причине, что сначала Fc у меня тоже тупил.
#26 by 2dolist
нехило! курить надо это. А какая версия postgre?
#27 by 2dolist
ещё проблема что если запускать батником, а ни из командной строки, то создаётся файл 0 размера. Т.е. по какой-то причине не пишется. Блин, тут права чтоль поменялись...
#28 by novichok79
я писал сам. чего там "курить"? все просто - делается дамп во временный каталог на системном SSD диске сервера, потом полученный файл копируется на диск для дампов, вместе с логом.
#29 by novichok79
9.4.10 для Windows x64 с сайта postgrespro.ru
#30 by novichok79
#31 by 2dolist
у нас 9.4.2-1С
#32 by novichok79
отлично, я планирую с обновлением платформы на 8.3.10 поставить 9.6, с сайта 1С.
#33 by 2dolist
пока норм работает платформа - уже обновили
#34 by 2dolist
а если просто у тебя запустить строку
#35 by 2dolist
%PGBIN%pg_dump.exe --format=custom --compress=9 --file=%DUMPPATH% > %LOGPATH% отработает?
#36 by 2dolist
ну, вручную заданными параметрами естественно. Я просто хочу узнать, у тебя --format=custom отрабатывает или нет без всяких обозначений переменных среды.
#37 by novichok79
да, отработает. я уже писал выше, как я оформил бы вызов pg_dump без указания переменных среды.
#38 by novichok79
тоже писал: батник работает уже год.
#39 by novichok79
просто запусти батник, который я тебе дал, и проверь сам.
#40 by ansh15
--jobs хороший параметр, но его можно использовать только с форматом вывода directory, то есть --format=directory. Попробуй, когда-то проверял в PowerShell & 'C:Program FilesPostgresPro 1C9.6inpg_dump.exe' "-Fc" "-b" "-fC:pgsqlench.bak" "bench" & 'C:Program FilesPostgresPro 1C9.6inpg_restore.exe' "-dbench" "C:pgsqlench.bak" База bench должна быть вновь созданной. Так работает.
#41 by 2dolist
а дамп, который в формате sql не удаётся восстановить через psql. Вообще какая-то засада и нихрена не понятно. Почему fc перестал работать. Попробовали выгрузить в архив с форматом tar, он пгрестором не цепляется - говорит формат не тот.
#42 by 2dolist
хотя, на винде мб тар и не пойдёт
#43 by novichok79
я да запамятовал, что он только при восстановлении может дать газу. а бэкап только без него делается, если в кастом формате. просто вызови pg_dump с ключом --format=custom, дальнейшеий диалог не имеет смысла, пока ты этого не сделаешь.
#44 by ansh15
Вот и ответ "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" Отсюда
#45 by 2dolist
просто вызови pg_dump с ключом --format=custom так изначально так и было. -Fc это прямой аналог --format custom. он выдаёт pg_dump: [cumsom archiver] WARNING: ftell mismatch with expected position -- ftell used.
#46 by Йохохо
нельзя в произвольном порядке комбинировать старую и новую нотации, перепиши все в новой с учетом
#47 by 2dolist
у меня не работают обозначения через --format попробовал запустить "адресpg_dump.exe" --format=custom --verbose --file="куда ставить" не отработало - ругается на format=custom - неопределенная лексема
#48 by 2dolist
в 44 просто сказано не использовать | И нак не используем
#49 by 2dolist
Нет больше идей как оживить custom archiver? Уже появляется желание снести и переустановить просто постгрешку.
#50 by novichok79
у меня все норм, покажи полностью что пишешь
#51 by 2dolist
В общем, в командной строке нормально отрабатывает таким образом: cd "адресPostgreSQL9.4.2-1.1Cin" .pg_dump.exe --host АдресХоста --port 5432 --username "postgres" --пасс --format custom --verbose --file "АдресКудаСкидыватьАрхивчик" "ut11_3test" Осталось запустить это в батнике, а то просто так не отрабатывает
#52 by novichok79
я еще равно обычно после параметров ставлю. но если так работает, то норм.
#53 by 2dolist
сейчас пробую твой батничек развернуть. Вопрос есть. А Зачем нам нужна промежуточная директория, из которой потом всё равно перекачиваем в конечную?
#54 by novichok79
промежуточная директория на SSD диске, а конечная - на обычном HDD. это нужно для скорости.
#55 by 2dolist
хитро. Не взлетает что-то батничек. Подозреваю, что с кодировкой дело. выполнение команды chcp уже не отрабатывает даже.
#56 by 2dolist
Спасибо большое novichok79! взял за основу батник из , переписал его и всё взлетело. Но такой момент. Многопоточная архивация недоступна для формата custom. Пришлось её отменить.
#57 by novichok79
был рад помочь.
#58 by novichok79
был бы еще более рад, если бы мне на яндекс-кошелек упало чуть-чуть денежек ))))
#59 by 2dolist
так данные нужны чтоб скинуть!
#60 by novichok79
отлично, написал на stupidboxx@mail.ru с ****oleg@gmail.com
#61 by 2dolist
отблагодарил
#62 by novichok79
получил, спасибо, очень приятно.
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С