Имя: Пароль:
1C
1С v8
Создание дампа и восстановление базы из него (Postgresql+Linux+1C)
0 elti
 
28.09.21
12:56
Приветствую всех!

Помогите пожалуйста разобраться, при создании backup (база УПП) c помощью pg_dump выходит ошибка:

pg_dump: Ошибка выгрузки таблицы "config": сбой в PQgetResult().
pg_dump: Сообщение об ошибке с сервера: ОШИБКА:  invalid memory alloc request size 1413706665
pg_dump: Выполнялась команда: COPY public.config (filename, creation, modified, attributes, datasize, binarydata) TO stdout;

Эта тема уже здесь обсуждалась, КА 1.1.107.4 - проблемы с архивацией на СУБД Postgres что если размер строки больше 1гб, то выходит ошибка. Вариант решения бэкапить 3 командами вместо одной.
    
1. Создаем сам дамп, без проблемной таблицы.
2. Выгружаем схему проблемной таблицы.
3. Копируем таблицу в бинарном веде в файл.

$ pg_dump -Z 9 -T <таблица> -f <имя_дампа>.dump.gz <имя_базы>
где
<таблица> - config
<имя_дампа> - произвольное имя??? или откуда его взять
<имя_базы> - test

$ pg_dump -t <таблица> -s -f <имя_схемы>.shema <имя_базы>
где
<имя_схемы> - где его взять?

$ psql -d <имя_базы> -c "COPY public.<таблица> TO '/var/lib/postgresql/<имя_таблицы>.tabl' WITH BINARY;"
где
<таблица> - config
<имя_таблицы>.tabl - тоже config получается?

Где взять инфу имя_схемы, имя_дампа?
1 ansh15
 
28.09.21
13:05
pg_dumpbinary/pg_restorebinary https://github.com/lzlabs/pg_dumpbinary давно и успешно решает эту задачу.
Имя дампа на усмотрение пользователя.
2 liam neeson
 
28.09.21
13:17
(0) Попробуй конфигурацию поставщика удалить
3 elti
 
28.09.21
13:22
(2) Еси удалить то все заработает, но наши 1С-ники против
4 fisher
 
28.09.21
13:27
Ну вариантов не особо. Либо бэкапить кластер целиком через pg_basebackup (большие базы часто специально поднимают в отдельных кластерах, это удобно по нескольким причинам), либо юзать сторонние утилиты для бэкапа, либо юзать коммерческие сборки постгри в которых эта плюшка уже на борту обычно.
5 fisher
 
28.09.21
13:28
Бэкапить проблемную таблицу отдельно - это как-то совсем не по-людски.
6 liam neeson
 
28.09.21
13:34
(4)
>либо юзать коммерческие сборки постгри в которых эта плюшка уже на борту
в каких сборках это есть?
7 fisher
 
28.09.21
13:48
(0) О! Чего нагуглил. Попробуй опцию -F c для pg_dump.
8 fisher
 
28.09.21
13:49
Это по следам чьей-то заметки на гитхабе: https://gist.github.com/jdeoliveira/4080656
9 fisher
 
28.09.21
13:51
(6) Возможно наврал. Почему-то был уверен, что в postgres pro это есть. И где-то еще давно слышал, но не помню где. Эхо каких-то презентаций.
10 eklmn
 
гуру
28.09.21
13:52
выгружай отдельно
pg_dump ... --exclude-table-data=config ...
psql -c "\copy config TO 'path/config.bin' WITH BINARY;"

загружай отдельно
psql -c "\copy config FROM 'path/config.bin' WITH BINARY;"
11 liam neeson
 
29.09.21
13:08
(7) Не помогает
12 fisher
 
29.09.21
15:37
(11) Эх. Да, это было бы слишком просто.
13 elti
 
04.10.21
16:23
Подскажите пжл установил pg_dumpbinary, делаю пробный backup, но выходит ошибка типа в строке 179 нет пароля. как решить проблему?

postgres@1c-server-test:/opt/pg_dumpbinary-master$ pg_dumpbinary  -d doccorpеtest /opt/doccorptest2
Database doccorptest dump created at 2021-10-04T18:13:41
DBI connect('dbname=doccorptest;port=5432','',...) failed: fe_sendauth: no password supplied at /usr/local/bin/pg_dumpbinary line 179.

179 строка выглядит вот так

$dbh = DBI->connect("dbi:Pg:dbname=$DBNAME$dbpg_opt", $DBUSER, '', {AutoCommit => 1, InactiveDestroy => 1});
14 mkfadmin
 
05.10.21
07:38
(0) если еще актуально

$ pg_dump -Z 9 -T <таблица> -f <полный путь к хранилищу архивов><имя_дампа>.dump.gz <имя_базы>
где
<таблица> - config
<имя_дампа> - произвольное имя, например имя базы
<имя_базы> - test

$ pg_dump -t <таблица> -s -f <полный путь к хранилищу архивов><имя_файла_схемы> <имя_базы>
где
<имя_файла_схемы> - любое, например "config.shema.dump"

$ psql -d <имя_базы> -c "COPY public.<таблица> TO '<полный путь к хранилищу архивов><имя_файла_таблицы>' WITH BINARY;"
где
<таблица> - config
<имя_файла_таблицы> - любое имя, например "public.config.dump"

Для сохраняемых файлов лучше указывать полный путь к хранилищу архивов.
15 Garykom
 
гуру
05.10.21
07:46
ключик -Fc разве не помогает?
16 Garykom
 
гуру
05.10.21
07:47
(15)+ для pg_dump
17 fisher
 
05.10.21
09:15
(15) В (11) пишут, что не помогает.
18 Garykom
 
гуру
05.10.21
09:25
(17) ты сам проверял?
у нас все ок, хотя конечно возможно что нет таких табличек больших
19 fisher
 
05.10.21
09:36
(18) У меня нет такой проблемы. Да и постгри уже нет несколько лет :)
У тебя скорее всего тоже нет такой проблемы. Тут же не в размере таблички проблема. А в полуторагиговой строке.
20 fisher
 
05.10.21
09:42
Вообще подозрительно, что конфа столько весит. Такое бывает вследствие каких-то сбойных элементов конфы.
Я бы попробовал выгрузить конфу в файлы и натравить на нее TreeSize - глянуть, чего там в топах.
21 Garykom
 
гуру
05.10.21
09:43
(19) у нас скорее всего версия PostgreSQL уже патченая 11 и эта трабла не возникает
22 ansh15
 
05.10.21
10:08
(13) Задать пароль в файле .pgpass  https://postgrespro.ru/docs/postgresql/13/libpq-pgpass
23 GANR
 
05.10.21
10:16
(3) а почему они против? может найдем способ по-нормальному это сделать
24 elti
 
05.10.21
11:28
(13) Побороли проблему
25 elti
 
05.10.21
11:29
(24) с DBI connect('dbname=doccorptest;port=5432','',...) failed: fe_sendauth: no password supplied at /usr/local/bin/pg_dumpbinary line 179.
26 elti
 
05.10.21
11:42
изменил
local all postgres trust

Вроде процесс пошел, НО

Пытаюсь создать бэкап от имени пользователя postgres в папку  /opt/backuptest дал пользователю postgres права на запись в эту папку. Выходит ошибка не дает сделать dump в любую папку кроме как с /var/lib/postgresql/10/main.

pg_dumpbinary  -d doccorplena /opt/backuptest/doccorptest2
Database doccorplena dump created at 2021-10-05T13:40:03
FATAL: can not save snapshot information to file .snapshot_info

Файла .snapshot_info не могу найти в системе, какая-то фигня
27 elti
 
05.10.21
11:42
(26) postgres@1c-server-test:/opt$ ls -alF /opt/backuptest
итого 16
drwxrwxr-x  4 postgres postgres 4096 окт  5 13:40 ./
drwxr-xr-x 10 root     root     4096 окт  5 12:28 ../
drwxrwxr-x  2 postgres postgres 4096 окт  5 12:33 doccorptest/
drwxrwxr-x  2 postgres postgres 4096 окт  5 13:40 doccorptest2/
28 GANR
 
05.10.21
11:56
(26) Создать папочку и chown на postgres:postgres сделать. Не?
29 elti
 
06.10.21
11:51
разобрались надо прямо перейти в паку куда будет делаться backup у меня это /opt/backuptest и там уже команду запускать, мануала четкого нет, поэтому пальцем в небо

postgres@1c-server-test:/opt/backuptest$ pg_dumpbinary  -d doccorplena doccorptest1

Бэкап сделался вроде все норм, сейчас будем пробовать восстановить, после отпишусь
30 elti
 
06.10.21
13:30
Не получается восстановить базу.

postgres@1c-server-test:/opt/backuptest$ pg_restorebinary -d doccorplena doccorpbackup
Restoring pre data section into upptest1.
ERROR: pg_restore error to obtain dump information for table structure.

Может кто-нибудь пользуется pg_dumpbinary/pg_restorebinary помогите решить проблему

в мануале вот что написано:

pg_restorebinary

Program used to restore a PostgreSQL binary dump generated with pg_dumpbinary. It can not be used to restore other PostgreSQL dump.

usage: pg_restorebinary [options] -d dbname backup_dir

  backup_dir   directory where backup files to restore will be read.
               It must be a directory created by pg_dumpbinary.
options:

  -a, --data-only              restore only the data, no schema
  -d, --database DBNAME        database to restore, it must exists
  -h, --host HOSTNAME          database server host or socket directory
  -i, --info                   print information about the dump and exit
  -j, --job NUM                use this many parallel jobs to restore
  -n, --schema SCHEMA          restore the named schema(s) only
  -N, --exclude-schema SCHEMA  do NOT restore the named schema(s)
  -p, --port PORT              database server port number, default: 5432
  -t, --table TABLE            restore named relation
  -T, --exclude-table TABLE    do NOT restore the named table
  -u, --user NAME              connect as specified database user
  -v, --version                show program version
  --help                       show usage
  --disable-triggers           disable triggers during data restore
  --truncate                   truncate the table before importing the data
31 liam neeson
 
06.10.21
13:42
(23) Может не знают как обновлять базу после этого?
:)
32 liam neeson
 
06.10.21
13:53
(18) Я проверял. При архивации УПП 1.3 и КА 1.2 с измененной конфигурацией есть проблема из топика. У остальных конф нет.
33 ansh15
 
06.10.21
14:39
Любая конфа размером больше 512 МБ в режиме редактирования с сохранением поддержки, например последняя типовая БГУ 2(573 МБ).
34 GANR
 
06.10.21
21:41
(31) А нельзя ли
- выгрузить конфигурацию
- конфигурацию поставщика удалить
- снять дампы
- вернуть конфигурацию как было до дампов
?
35 elti
 
11.10.21
10:41
(34) Программист 1С не дает удалять конфу от поставщика, может я конечно что-о не догоняю. Хотелось бы все-таки разобраться с pg_dumpbinary. Неужели никто не бэкапит с помощью pg_dumpbinary?
36 ansh15
 
11.10.21
10:55
(35) Укажи полный путь к backup_dir - /opt/backuptest/doccorptest2(или любой другой нужный) в твоем случае.
37 eklmn
 
гуру
11.10.21
11:46
(35) первым будешь...
Что тебе мешает делать как все?
38 elti
 
11.10.21
12:02
(36) не помогло, указал полный путь

postgres@1c-server-test:/opt/backuptest$ pg_restorebinary -d upptest1 /opt/backuptest/upptestbackup
Restoring pre data section into upptest1.
ERROR: pg_restore error to obtain dump information for table structure.
39 Garykom
 
гуру
11.10.21
12:35
(38) а в новую чистую базу?
40 ansh15
 
11.10.21
13:19
postgres:~> createdb testbkp
postgres:~> pg_restorebinary -j 2 -d testbkp /home/postgres/pgbackups/zkcopy1
Restoring pre data section into testbkp.
Restoring post data section.
Все восстанавливается, база работает.
(38) Посмотри какие файлы есть в каталоге upptestbackup? Должны быть data-public*.bin.gz, meta-public*.txt, data-sequences.lst, pre-data.dmp и post-data.dmp
Пользователь postgres должен иметь права на их чтение, хотя бы.
41 ansh15
 
11.10.21
13:32
postgres:pgbackups> pg_restorebinary -info ~/pgbackups/zkcopy1
; Archive created at 2021-10-04 20:06:46 MSK
;     dbname: zkcopy1
;     Dumped from database version: 13.3
;     Number of tables to retore: 2052
42 elti
 
11.10.21
17:42
(40) (41)
Все data-public*.bin.gz, meta-public*.txt, data-sequences.lst, pre-data.dmp и post-data.dmp файлы есть, даже выгрузка весит норм, но блин все равно не хочет загружаться и все.

postgres@1c-server-test:/opt/backuptest$ pg_restorebinary -j 2 -d upptest1 /opt/backuptest/upptestbackup
Restoring pre data section into upptest1.
ERROR: pg_restore error to obtain dump information for table structure.
postgres@1c-server-test:/opt/backuptest$ pg_restorebinary -info upptestbackup
; Archive created at 2021-10-05 13:52:58 +05
;     dbname: upptest1
;     Dumped from database version: 10.5 (Ubuntu 10.5-24.1C)
;     Number of tables to retore: 1824


а бэкап Вы так делаете ?

postgres@1c-server-test:/opt/backuptest$ pg_dumpbinary  -d upptest1 upptestbackup
43 ansh15
 
11.10.21
20:10
postgres:~> pg_dumpbinary -d testbkp -j 2 /opt/backuptest/testbkp
Database testbkp dump created at 2021-10-11T18:17:46
Dumping pre data section at 2021-10-11T18:17:46
Dumping data at 2021-10-11T18:18:52
Dumping post data section at 2021-10-11T18:19:53
Dump ended at 2021-10-11T18:20:08
postgres:~> createdb testbkp11
postgres:~> pg_restorebinary -d testbkp11 -j 2 /opt/backuptest/testbkp
Restoring pre data section into testbkp11.
Restoring post data section.
PostgreSQL_13.3-2.1C, CentOS 7
44 ansh15
 
12.10.21
00:27
Посмотрел содержимое таблицы config конфигурации в режиме редактирования с сохранением поддержки, размер конфигурации 573 МБ.
Похоже, конфигурация поставщика уже не хранится в одном поле binarydata. Вместо этого есть несколько десятков записей с размером бинарной строки поля binarydata 10МБ, а в поле datasize указан размер конфигурации в байтах.
Стандартный pg_dump выгружает без ошибок. Видимо, было изменение способа хранения конфигурации поставщика, начиная с какой-то версии платформы. Смотрел на 8.3.14 и 8.3.20
Так что, для этого случая, pg_dumpbinary и не нужен уже.
45 rphosts
 
12.10.21
04:35
Эээээ а разве такие темы не 1-2 раза в квартал такие темы всплывают?
46 ДенисЧ
 
12.10.21
07:16
(45) Про мышей и кактусы - помнишь?
47 eklmn
 
гуру
12.10.21
10:23
(46) а какатусы то при чем, если у мышей руки не оттудова?
48 elti
 
13.10.21
07:39
(44) У меня стоит платформа 8.3.15.1656

при бэкапе pg_dump выдет ошибку ( не работает короче)

pg_dump: Ошибка выгрузки таблицы "config": сбой в PQgetResult().
pg_dump: Сообщение об ошибке с сервера: ОШИБКА:  invalid memory alloc request size 1413706665
pg_dump: Выполнялась команда: COPY public.config (filename, creation, modified, attributes, datasize, binarydata) TO stdout;
49 elti
 
13.10.21
07:42
(43) попробую еще раз сегодня бэкап через pg_dumpbinary сделать

У   pg_dumpbinary как раз на github написано

pg_dumpbinary is useful in some situations:

you have bytea that can not be exported by pg_dump because the total size of the escape/hex output exceed 1Gb.
50 ДенисЧ
 
13.10.21
07:44
(47) Так мыши же.