@pgsql

Страница 287 из 1062
Denis
29.03.2017
05:57:53
Привет всем, какие права нужны чтоб COPY делать в файл, а не только в stdout?

Dmitry
29.03.2017
06:04:43
Dattk
29.03.2017
06:05:29
Привет всем, какие права нужны чтоб COPY делать в файл, а не только в stdout?
“В таблице, данные которой читает команда COPY TO, требуется иметь право на выборку данных, а в таблице, куда вставляет значения COPY FROM, требуется право на добавление. При этом, если в команде перечисляются избранные столбцы, достаточно иметь права только для них. Если для таблицы включена защита на уровне строк, соответствующие политики SELECT будут применяться и к операторам COPY таблица TO. Операторы COPY FROM для таблиц с защитой строк в настоящее время не поддерживаются. Вместо них следует использовать равнозначные операторы INSERT. Файлы, указанные в команде COPY, читаются или записываются непосредственно сервером, не клиентским приложением. Поэтому они должны располагаться на сервере или быть доступными серверу, а не клиенту. Они должны быть доступны на чтение или запись пользователю Postgres Pro (пользователю, от имени которого работает сервер), не клиенту.” Excerpt From: The PostgreSQL Global Development Group. “Документация к Postgres Pro 9.6.2.1.” iBooks.

Denis
29.03.2017
07:35:23
Привет всем! Есть таблица, на неё навешан after each row триггер для аудита событий. При вставках пакетом в десятки тысяч строк за раз выходит медленно от слова "очень" и триггер съедает 80% времени запроса. Вариант с переписыванием правил на вставку по производительности от after each row триггера не отличается. Есть ли какие варианты для ускорения? И да, можно ли исхитриться и в statement триггер по событию передать весь массив строк для вставки за один присест?

Google
Sergey
29.03.2017
07:38:40
Отключить триггер и писать в аудит также пакетом

Denis
29.03.2017
07:41:35
Ну да, самое очевидное решение - переписать все места, изменяющие таблицу. Но есть минус - это не защищает от случаев, когда данные меняются напрямую в базе dba и эти изменения пропадут.

А в триггеры, которые after statement точно нет хитрой возможности что-то передать из пакетной вставки?

lemi
29.03.2017
07:56:36
а точно медленно выходит т.е есть просто вставка 100тыс строк то 15с а с триггером 1500с ? или с триггером 30с ?

Denis
29.03.2017
07:57:53
При 57тыс без триггера 9,5 сек, а с триггером - 49,5 сек

lemi
29.03.2017
07:58:21
можно таблицы аудита делать unlogged если они используются только в экстренных случаях (ps тогда таблицы аудита не попадут в репликацию если такая имеется)

Denis
29.03.2017
07:58:55
Нет, к сожалению они часть схемы и используются в хранимках((

Alexey
29.03.2017
08:00:52
меня все гложит идея попробовать для аудирования прикрутить механизм logical decoding

должно получиться достаточно дешево по ресурсам и надежно

Denis
29.03.2017
08:02:09
Можно поподробнее, что такое logical deciding?

Alexey
29.03.2017
08:02:41
типа вот https://www.postgresql.org/docs/current/static/logicaldecoding-explanation.html

Denis
29.03.2017
08:04:58
Все, я понял о чем вы. А в логическую репликации таблицы можно добавить пользователя, тип операции и время?

Google
Alexey
29.03.2017
08:07:10
ну по факту, ты делаешь изменения с объектом (таблицей) и хочешь зафиксировать "кто и какие изменения" сделал

вот "какие изменения" уже есть в WAL

и логикал декодинг может помочь асинхронно эту информацию сохранить в другое место

а вот по поводу "кто" - это да... пока вопрос на проработку

как первая идея, в оригинальной таблице должны быть поля типа "updated_at и updated_by"

единственно такой подход наверное не сработает при удалении...

Denis
29.03.2017
08:09:49
Да, из неё удаляют (тоже пачками)

А выключение триггера транзакционно?

У меня есть мысль при вставках через хранимки выключить триггер в транзакции, самому пакетом записать данные в аудит и включить обратно

Alexey
29.03.2017
08:14:34
если включение/выключение тригера транзакционно, то при такой операции должна вешаться локировка на всю таблиц

или подразумевается, что в рамках других тразакций триггер все еще будет включен?

Denis
29.03.2017
08:15:54
Да, в других транзакциях хотелось бы держать включённым. Так не работает, да?)

Alexey
29.03.2017
08:16:21
я утверждать не могу

Denis
29.03.2017
08:16:55
Спасибо за советы, все равно

raksita
29.03.2017
08:53:39
Всем привет. Что делать если выполнение pg_terminate_backend не отключает запрос?

Denis
29.03.2017
08:55:24
То есть соединение не умирает? Можно из pg_stat_activity вытащить pid запроса и попробовать убить соединение через kill

Andrey
29.03.2017
08:56:12
То есть соединение не умирает? Можно из pg_stat_activity вытащить pid запроса и попробовать убить соединение через kill
Это в последнюю очередь надо делать. Если убить процесс, то база перейдёт в recovery mode.

Denis
29.03.2017
08:57:42
Ну не надо убивать postmaster, убейте дочерний. Ведь именно это вы делаете через terminate backend. Если по-доброму, то нужно отменять запрос с сохранением соединения через cancel backend

raksita
29.03.2017
08:57:59
да, вчера уже был переход в рекавери мод на пару минут, сегодня ситуация повторяется

Andrey
29.03.2017
08:58:27
Денис, даже дочерний процесс когда убиваете, база в рекавери переходит.

Google
Dmitry
29.03.2017
08:58:33
То есть соединение не умирает? Можно из pg_stat_activity вытащить pid запроса и попробовать убить соединение через kill
Боже, хватит уже убивать через kill. Есть же pg_cancel_backend(your_pid) и pg_terminate_backend(your_pid)

Andrey
29.03.2017
08:58:48
Если постмастер убить, то она вообще отрубится )

Боже, хватит уже убивать через kill. Есть же pg_cancel_backend(your_pid) и pg_terminate_backend(your_pid)
Так у ТС как раз эта функция и не работает, я так понял.

Может, PID неправильный?

raksita
29.03.2017
08:59:22
проблема в том, что cancel_backend и terminate_backend выдают true, но запрос не отключается

Andrey
29.03.2017
08:59:30
Посмотрите, какой статус у процесса на сервере и как он расходует ресурсы.

raksita
29.03.2017
09:03:01
процессор загружен практически до упора

pid из pg_stat_activity, так что вряд ли он неправильный

Dmitry
29.03.2017
09:07:16
А strace можете к процессу подключиться? Что там происходит?

Процесс от приложения или системный? Со стороны приложения можно сказать, что происходит?

raksita
29.03.2017
09:15:16
процесс от приложения, скорее всего там таймаут сработал, а запрос продолжает выполняться

Петр
29.03.2017
09:19:10
если да, то стукнись в пм, попробуем разобраться

Dmitrii
29.03.2017
10:25:49
Всем привет. Подскажите, куда могло деться место на диске в pg (RDS), как посмотреть куда оно ушло? Если использовать запросы отсюда: https://wiki.postgresql.org/wiki/Disk_Usage то они показывают результаты будто у меня все ок

Но на самом деле у меня куда то пропало 25гб

При чем, пропало за 2 дня примерно. Понимание из-за чего примерно есть и я до сих пор не уверен, но проблема вроде локализована. Остался вопрос вернуть место бы

Петр
29.03.2017
10:33:17
du не помогает чтоли?

Dmitrii
29.03.2017
10:34:59
Где я du то сделаю. У меня RDS

Darafei
29.03.2017
10:42:51
убить все сессии и vacuum?

Dmitrii
29.03.2017
10:44:42
Фул вакум сделал после теоретического отстрела проблемной части

Google
Dmitrii
29.03.2017
10:44:52
Но место чет не особо вернулось

Петр
29.03.2017
10:44:54
для начала мождно просто старые сессии прибить

я с RDS не знаком, на него нельзя подключиться psql?

Dmitrii
29.03.2017
10:45:53
psql можно

Петр
29.03.2017
10:46:23
а с него нельзя \! du ?

Dmitrii
29.03.2017
10:47:31
А, я думал ты про $ du )

Darafei
29.03.2017
10:49:42
\! это ж локальная команда

Петр
29.03.2017
10:50:30
На рдс так нельзя?

Dmitrii
29.03.2017
10:50:59
Блин короче нашел

Admin
ERROR: S client not available

Dmitrii
29.03.2017
10:51:19
Давным давно включил логгировние медленных запросов

Тогда их небыло вообще. Потом отвлекся и забыл

2 дня назад сделали деплой и посыпались

?

Igor
29.03.2017
10:51:49
Коллеги, а кто-нибудь patroni ha cluster юзает?

Dmitrii
29.03.2017
10:51:53
Щас в консоли RDS нашел логи размером по гигабайту

Darafei
29.03.2017
10:52:46
На рдс так нельзя?
это не на удалённой машине выполнится, это прямо на той, на которой psql запущен же

Петр
29.03.2017
10:53:15
На рдс нельзя по ссш?

Dmitrii
29.03.2017
10:53:26
Щас буду искать как логи снести оттуда

Нельзя

Google
Dmitrii
29.03.2017
10:56:50
Блин как обычно через жопу удаляется с помощью их parameter groups

Через ретеншен ?

Igor
29.03.2017
11:07:00
Я
Скажите, пожалуйста, patroni ведь не поддерживает кластер с несколькими hot standby?)

Игорь
29.03.2017
11:07:13
Конечно же поддерживает

Начто он тогда кластер

Igor
29.03.2017
11:07:47
когда я делаю 4-х нодовый кластер, hot standby становится только одна нода

Игорь
29.03.2017
11:08:01
что-то ты путаешь

Igor
29.03.2017
11:08:07
т.е.: 1. master 2 hot standby 3. replica

4. replica

Игорь
29.03.2017
11:08:57
не видел такого... Может быть у тебя в конфиге 2. указано notfailover

покажи patronictl list твой кластер

У тебя там не может быть написано master replica. Там только Leader и Sync Standby, если синхронная

Igor
29.03.2017
11:10:16
в patroni.yml указано: tags: nofailover: false noloadbalance: false clonefrom: false nosync: false

Описал неправильно. Вывод: +---------+----------+----------+--------------+---------+-----------+ | Cluster | Member | Host | Role | State | Lag in MB | +---------+----------+----------+--------------+---------+-----------+ | pgsql | pgsql_01 | 10.0.0.2 | Leader | running | 0.0 | | pgsql | pgsql_02 | 10.0.0.3 | | running | 0.0 | | pgsql | pgsql_03 | 10.0.0.4 | Sync standby | running | 0.0 | | pgsql | pgsql_04 | 10.0.0.5 | | running | 0.0 | +---------+----------+----------+--------------+---------+-----------+

Игорь
29.03.2017
11:12:08
Ну все у тебя ок

Igor
29.03.2017
11:12:14
Так вот, хочется, чтобы sync_standby было больше одного )

но в доке написано, что может быть только один

Игорь
29.03.2017
11:12:27
А, это да, не поддерживает

Igor
29.03.2017
11:12:34
Вопрос: так будет всегда?)

Игорь
29.03.2017
11:12:58
Да, скорее всего да, почитай в issues на githab там подробно разжевано

Igor
29.03.2017
11:13:08
спс)

Страница 287 из 1062