
Victor
14.02.2017
10:04:46
Привет, ребят, подскажите кто с pg_restore фамильярен, как его заставить крупные таблицы восстанавливать в текстовый SQL файл? (база 62GB)
пробую для небольшой таблицы, все гуд
pg_restore --data-only --table=small_table database.csql > small_table.sql
COPY small_table(field1, field2....) FROM stdin;
<data>
делаю тоже самое для огромной таблицы, получаю только
pg_restore --data-only --table=big_table database.csql > big_table.sql
COPY big_table(field1, field2....) FROM stdin;
\.
postgres 9.2

Anton [Mgn, az09@osm]
14.02.2017
10:11:53
а это не ограничение оси на размер файла..?

Oleg
14.02.2017
10:12:14
оси?

Google

Oleg
14.02.2017
10:12:20
может фс всетаки?

Victor
14.02.2017
10:12:43
не должно, Centos 6

Anton [Mgn, az09@osm]
14.02.2017
10:12:45
ось у всех одна же, точно )

Sergey
14.02.2017
10:13:05
на раз дамп тут же лежит, значит не оно...

Ilya
14.02.2017
10:16:30
Привет сообщество. Есть вопрос про pathman. Попробовал добавить столбец к таблице потом посмотрел на тригеры и проверил апдейт. Тригер заточен на старые колонки и переносит только их, может что не так настроили?

Ildar
14.02.2017
10:26:57
код создания update-триггеров не менялся кажется начиная с бета-версии. Думаю, его имеет смысл переписать. Добавим себе в туду

Ilya
14.02.2017
10:29:57
Спасибо, попробую=)

Victor
14.02.2017
10:30:39
ок, тогда другой вопрос, как правильно восстановить только часть данных из кастомного бэкапа (-Fc) ? (для определенной таблицы для нужных значений поля с датой) я планировал вытащить нужную таблицу в текстовый sql, затем grep'нуть нужные мне даты и заинсертить в базу, раз с файликом не получается, возможно ли бэкап в новую базу с новым именем развернуть, не трогая старую? спрашиваю тк в бэкапе же лежит структура базы, в т/ч ее имя

Sergey
14.02.2017
10:35:51
-d <db name> -t <table name>

Victor
14.02.2017
11:15:27
странно, # select count(*) from big_table;
count
-------
0
(1 row)

Sergey
14.02.2017
11:24:10
Может этих данных нет в файле дампа? Какой у него размер?

Victor
14.02.2017
11:31:05
дамп 62GB

Google

Victor
14.02.2017
11:35:32
для -l показывает что данные есть 29737; 0 21799 TABLE DATA public big_table user

Alexander
14.02.2017
11:39:55
а в новую базу без ключей типа только структура, или только данные разворачивали данную таблицу?

Victor
14.02.2017
11:47:43
пробовал и целиком и только схему и только данные
схема восстанавливется
сейчас запущу восстановление всей базы в новую, может получится

Sergey
14.02.2017
12:25:50
а в big_table нет внешних ключей?

Аггей
14.02.2017
12:28:37
А констрейты разве не после восстановления данных?

Sergey
14.02.2017
12:32:45
я бы в этом случае сначала восстановил схему (--schema-only), затем дропнул констрейны, а потом восстановил данные (--data-only)
ну или можно не восстанавливать секцию post-data
(--section)

Victor
14.02.2017
12:42:08
да, CONSTRAINT используются!

Sergey
14.02.2017
12:44:24
62Гб дамп восстанавливать долго, имхо....

Victor
14.02.2017
12:45:25
вот нашел --schema-only is equivalent to --section=pre-data --section=post-data. --data-only is equivalent
>>>> to --section=data

Sergey
14.02.2017
12:46:25
ну вот надо —section=pre-data —section=data

Victor
14.02.2017
12:46:38
т,е сначала сделать --section=pre-data для всей базы, а потом --section=data для нужной таблицы?

Sergey
14.02.2017
12:46:53
Post-data items consist of definitions of indexes, triggers, rules and constraints other than validated check constraints
можно сделать —section=pre-data для одной таблички. Убедиться что констрены для неё не создались или удалить их если создались. а потом для неё же —section=data
а чтобы даные восстанавливались быстрей, можно попробовать —jobs задать, сколь не жалко.

Victor
14.02.2017
12:50:59
ок. тогда стопаю восстановление

Айтуар
14.02.2017
12:52:02

Sergey
14.02.2017
12:55:36
оно же вроде умеет крошить таблица на несколько воркеров?

Google

Victor
14.02.2017
12:55:39
вся база около 1000 таблиц

Sergey
14.02.2017
12:57:06
9.2?

Victor
14.02.2017
12:57:16
да

Sergey
14.02.2017
12:58:04
ну есть оно там....

Айтуар
14.02.2017
13:00:17

Sergey
14.02.2017
13:03:44
нет
я точно помню, что где то рассказывали что умеет. Там решь шла про 9.4 или 9.5. Сейчас не могу вспомнить где именно....

Айтуар
14.02.2017
13:06:17

Victor
14.02.2017
13:09:01
(0 rows)

Sergey
14.02.2017
13:09:50
\d big_table

Victor
14.02.2017
13:09:52
восстановил сначала --section=pre-data

Dmitrii
14.02.2017
13:11:07
У нас гео точки, и сетка не квадратная получается
Правильно бдует работать только на экваторе )

Darafei
14.02.2017
13:12:04
ага, то есть, хочешь сказать, lseg() работал правильно? :)

Victor
14.02.2017
13:12:11
retailnext_bak=# \d big_table
Table "public.big_table"
Column | Type | Modifiers
-------------+----------+-----------
field1 | bigint | not null
field2 | date | not null
field3 | smallint | not null
field4 | smallint |
field5 | integer |
Check constraints:
"dont_use_me" CHECK (1 < 0) NO INHERIT
констрейнов у оригинальной таблицы гораздо больше

Darafei
14.02.2017
13:13:05
point вообще не для географии
geography для географии
но это в следующих сериях

Dmitrii
14.02.2017
13:13:48
А точн

Google

Sadless74
14.02.2017
13:14:14
История успеха «Яндекс.Почты» с PostgreSQL
https://habrahabr.ru/post/321756/

Dmitrii
14.02.2017
13:14:16
В ядре geography нету?

Darafei
14.02.2017
13:14:30
нет
ишь чего захотел, там и тангенса гиперболического-то нет

Victor
14.02.2017
13:14:58
в общем запущу я фул рестор в 10 жобов

Dmitrii
14.02.2017
13:15:02
Херня этот ваш постгрес )

Victor
14.02.2017
13:15:09
в новую базу

Darafei
14.02.2017
13:15:53
ну вот когда начинаешь писать математику для geography поверх point, вдруг такие вещи обнаруживаются :)

Sergey
14.02.2017
13:16:01

Айтуар
14.02.2017
13:16:05

Victor
14.02.2017
13:16:29
не спрашивайте меня, зачем это dont_use_me )

Sergey
14.02.2017
13:17:01
а попробуйте обычным инсертом что ни будь в эту таблицу вставить?

Victor
14.02.2017
13:17:06
но восстанавливал схему через --section=pre-data
hmm ERROR: new row for relation "big_table" violates check constraint "dont_use_me"

Sergey
14.02.2017
13:21:16
ttt=# \d t
Таблица "public.t"
Столбец | Тип | Модификаторы
—-------+---------+------------------------------------------------
id | integer | NOT NULL DEFAULT nextval('t_id_seq'::regclass)
t | integer |
Ограничения-проверки:
"t_check" CHECK (1 < 0) NO INHERIT
ttt=# insert into t
( DEFAULT VALUES SELECT TABLE VALUES
ttt=# insert into t (t) values (10);
ОШИБКА: новая строка в отношении "t" нарушает ограничение-проверку "t_check"
ПОДРОБНОСТИ: Ошибочная строка содержит (1, 10).
удаляйте его....

Victor
14.02.2017
13:23:02
там в констрейнах еще триггер был на функцию, возможно там обход для t_check лежит
но он не восстановился в --section=pre-data

Sergey
14.02.2017
13:23:56
возможно. У вас же задача табличку с дампа поднять? удалите этот констрейн и сделайте снова —section=pre-data для этой таблицы.
или вообще на боевой базе все эти констрейны выключены...

Google

Sergey
14.02.2017
13:26:02
alter table big_table drop CONSTRAINT dont_use_me ;
что то мне подсказывает что при полном восстановлении эта табличка будет по прежнему пуста.
с такими то ограничениями :)

Victor
14.02.2017
13:31:52
убрал, ручной инсерт работает, пробую восстановить опять --section=data

Wom
14.02.2017
13:35:25
а как можно обойти 1 < 0 ?

Anatoliy
14.02.2017
13:36:41
через copy вероятно
хотя, это только предположение
или тупо отрубили, чтобы таблицу не меняли (хотя можно было выставить гранты)

Victor
14.02.2017
13:38:39
(0 rows)
в общем запускаю фулл рестор в новую базу

Wom
14.02.2017
13:39:09
copy обходит constraint?

Sergey
14.02.2017
13:39:20
в полном дампе точно есть данные для этой таблицы?

Павел П.
14.02.2017
13:39:35

Wom
14.02.2017
13:39:55
уф

Sergey
14.02.2017
13:41:19
просто для «big_table» сильно быстро Вы получаете результат...
7 минут между сообщениями. За это время он какраз перечитывает весь дамп (62Гб) с диска и только. Больше ни чего не делает.
а результаты полного рестора мы узнаем скорей всего к завтрашнему дню :)

Wom
14.02.2017
13:50:33
что ж за сервер-то?

Alibek
14.02.2017
13:53:52
А должна-ли сказываться авторизация (по паролю и без пароля) при подключении на производительности в ходе операций вставки (пачками по 1000)?

Dmitrii
14.02.2017
13:54:21

Sergey
14.02.2017
14:02:21
а кто ни будь может придумать зачем primary key делать varchar?
я просто пытаюсь воссоздать ход мысли тех архитекторов которые это давным давно сделали...