@pgsql

Страница 383 из 1062
WoodyFire
29.06.2017
15:23:16
ребят, а возможно на plpgsql вызвать несколько функций в разных потоках, а по завершению их выполнения выполнить требуемые действия?

Anatoliy
29.06.2017
15:26:48
триггеры?

WoodyFire
29.06.2017
15:38:45
триггеры?
почитал руководство. как я понял это не то. я имел ввиду если по простецки, то две очереди, два кассира. После обслуживания 1 покупателя каждым кассиром, охранник на выходе забирает пакеты у обоих покупателей и выдает все это за свою покупку ))))) как-то так.

Anatoliy
29.06.2017
15:39:28
Тогда вам нужна реализация очередей событий, как я понимаю

Google
WoodyFire
29.06.2017
15:51:14
Но..... для одного подключения имеется одна очередь и один поток в котором обрабатываются события из очереди. А мне нужено два потока. В общем вроде я сам нашел ответ на свой вопрос. Процедурный язык - это последовательное выполнение инструкций, а значит 1 обработчик, 1 поток.

может я и не прав. но мои познания такие

надо будет пощупать Си как прикрутить. Время будет руководство почитаю

WoodyFire
29.06.2017
16:04:51
Обычно в базе и так много параллельных запросов
ну это работает сервер для каждого подключения. да там много поточность.

Darafei
29.06.2017
16:05:32
Вообще SQL про "что я хочу получить", а "как" - это решение движка

В 9.6 впилили параллельный скан, а в SQL ничего не поменялось

WoodyFire
29.06.2017
16:08:35
ах, да, извиняюсь. на каждое подключение создается свой процесс. Но ведь в процессе можно создать N-потоков в одном адресном пространстве.

или это средствами plpgsql не возможно?

Anton [Mgn, az09@osm]
29.06.2017
17:32:47
https://gist.github.com/vadv/ec88fb9bc6214a8a8d57e6782d2edecb настройки для логирования от сюда можно взять
спасибо! правильно понимаю что log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h ' тут самое основное для pgbadger?

Andrey
29.06.2017
17:38:44
ах, да, извиняюсь. на каждое подключение создается свой процесс. Но ведь в процессе можно создать N-потоков в одном адресном пространстве.
T-SQL это вам не С. Например, в MSSQL, где есть полноценный параллелизм, оптимизатор сам принимает решение о параллельном выполнении, и хрен его заставишь параллелить хоть сколько-либо надежно.

С другой стороны план с параллелизмом чаще всего говорит о плохом запросе.

Google
Dmitry
29.06.2017
18:06:08
спасибо! правильно понимаю что log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h ' тут самое основное для pgbadger?
log_checkpoints = on log_connections = on log_disconnections = on log_lock_waits = on log_temp_files = 0 log_min_duration_statement = 100 log_autovacuum_min_duration = 0 track_io_timing = on log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h ' shared_preload_libraries = 'pg_stat_statements, auto_explain, pg_buffercache' pg_stat_statements.max = 10000 pg_stat_statements.track = all auto_explain.log_min_duration = 1s auto_explain.log_verbose = on auto_explain.log_nested_statements = on auto_explain.log_analyze = off # Use EXPLAIN ANALYZE insted of EXPLAIN auto_explain.log_buffers = off auto_explain.log_triggers = off auto_explain.log_timing = off

WoodyFire
29.06.2017
18:22:01
УРА. Я удовлетворил студента. То есть себя самого. из 3 минут ожидания выборки сократил до менее секунды )))))) select listb."ID", listb."firmName", listb."modelName", listb."firmNum", listb."invNum", listb."localNum", listb."createDate", listb."inDate", listb."tsName", listb.weight, listb."workPressure", listb."ispPressure", listb.capacity, listb."lastUpdate", moveb."ofceName", moveb.mdate from (select * FROM "Engineering"."listBall"()) as listb right join (select l2.idball, "Office"."ofceName", l2.mdate from "Engineering"."listMoveBall"() as l2 left join "PersonnelDepartment"."Office" using(idofce)) as moveb on listb."ID"=moveb.idball

Anton [Mgn, az09@osm]
29.06.2017
18:23:47
алсо я думал из этих shared_preload_libraries = 'pg_stat_statements, auto_explain, pg_buffercache' первые два занимаются примерно одним и тем же. про третий почитаю

еще раз большое спасибо )

WoodyFire
29.06.2017
18:25:53
вот только засада. не могу понять как правильно построить чтобы выводилось в результате все из listb и не важно есть запись в moveb или нет. Но если запись имеется, то подставить значение в конечный результат. Читал, читал мануал. Чет так и не могу побороть (((( подскажите пожалуйста как это сделать.

в данный момент выводиться записей ровно столько сколько в moveb (((

Anton [Mgn, az09@osm]
29.06.2017
18:32:12
коннект - дорогая операция, если на безопасность наплевать то хотябы с этой точки зрения, логировать ее стоит
приложение крутится на том же хосте где база. и 50 коннектов на миллионы операций выборки... ну не помешаются, ок )

WoodyFire
29.06.2017
18:38:39
всё дело в right join
ну точно )))). я ж впервый раз написал, но результат не крутанул. строк то со значением в moveb мало, а в listb много. увидел пустышки и задумался. ))))))))) огромное Вам спасибо, за то что вы есть. Хоть и возился полдня, но все же из 3,5 минут вышло не более 1,5 сек на 660 строк в конечном результате. при дефолтных настройках сервера. мой конечный запрос select listb."ID", listb."firmName", listb."modelName", listb."firmNum", listb."invNum", listb."localNum", listb."createDate", listb."inDate", listb."tsName", listb.weight, listb."workPressure", listb."ispPressure", listb.capacity, listb."lastUpdate", moveb."ofceName", moveb.mdate from (select * FROM "Engineering"."listBall"()) as listb left join (select l2.idball, "Office"."ofceName", l2.mdate from "Engineering"."listMoveBall"() as l2 left join "PersonnelDepartment"."Office" using(idofce)) as moveb on moveb.idball=listb."ID"





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

Anton [Mgn, az09@osm]
29.06.2017
18:45:22
ну у второго есть поддержка со стороны pgbadger
тогда зачем первый (и третий)?

хотя про третий почитал (https://postgrespro.ru/docs/postgresql/9.6/pgbuffercache.html) и думаю что полезно будет оставить

Dmitry
29.06.2017
18:47:29
тогда зачем первый (и третий)?
первый - потому что я привык к нему :)

Anton [Mgn, az09@osm]
29.06.2017
18:48:38
а, ясно, принимается ) мне-то огонь потушить, не до коннектов как бы ))

/dev/null
30.06.2017
01:36:33
Здаров

Google
/dev/null
30.06.2017
01:36:42
age(timestamp, timestamp) interval Вычитает аргументы и выдаёт "символический" результат с годами и месяцами, а не просто днями

А как просто количество дней выдать?

Igor
30.06.2017
01:39:18
SELECT ts2::date - ts1::date

/dev/null
30.06.2017
01:50:04
SELECT ts2::date - ts1::date
спасибо, а "псевдоним" колонки не подскажите как сделать

Igor
30.06.2017
01:50:54
select ts2::date - ts1::date from (select '2016-01-01 00:00:00'::timestamp as ts1, current_timestamp as ts2) x;

Artem
30.06.2017
02:07:21
Коллеги, а никто не пилил мастер-мастер на pglogical?

Конкретно, интересует возможность логической репликации через pgpool

Daniel
30.06.2017
03:41:05
Ребята, после неведомого страха в восстановлении сервера происходит вот такая шняга: root@scw-7c22e8:/# psql -h /var/run/postgresql psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Реально ли восстановить сокет без переустановки?

Или выполнить переустановку и сохранить данные?

Denis
30.06.2017
03:42:59
Посмотрите ps aux, работает ли процесс. И загляните в postgresql.conf, в какую директорию он кладёт сокеты

Daniel
30.06.2017
03:47:52


Daniel
30.06.2017
03:48:43
Но сервак после падения, там все монтировалось\перемонтировалось из разделов, где он лежал

Denis
30.06.2017
03:49:22
В процессах не вижу постгреса

Daniel
30.06.2017
03:50:07


И restart 100 раз делал

Igor
30.06.2017
03:50:30
а если руками, а не через systemd?

Denis
30.06.2017
03:51:18
То, что у вас служба запущена, не говорит, что работает процесс постгреса. Показатель - ps aux

Служба - это просто обвзяка над запуском процесса

Daniel
30.06.2017
03:58:28
root@scw-7c22e8:/# 2017-06-30 03:58:09 UTC [1839-1] LOG: could not bind IPv4 socket: Cannot assign requested address 2017-06-30 03:58:09 UTC [1839-2] HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry. 2017-06-30 03:58:09 UTC [1839-3] WARNING: could not create listen socket for "*******" 2017-06-30 03:58:09 UTC [1839-4] FATAL: could not create any TCP/IP sockets

Google
Daniel
30.06.2017
03:58:33
Теперь буду разбиратьсяяя

Denis
30.06.2017
03:59:52
Посмотрите netstat -an | grep 5432. Никто там не работает?

Daniel
30.06.2017
04:00:25
Ничего Оо

Сейчас сменил listen_address на *

root@scw-7c22e8:/# 2017-06-30 04:01:25 UTC [1886-1] LOG: database system was interrupted; last known up at 2017-06-28 14:47:55 UTC 2017-06-30 04:01:26 UTC [1886-2] LOG: database system was not properly shut down; automatic recovery in progress 2017-06-30 04:01:26 UTC [1886-3] FATAL: could not open directory "/var/run/postgresql/9.5-main.pg_stat_tmp": No such file or directory 2017-06-30 04:01:26 UTC [1885-1] LOG: startup process (PID 1886) exited with exit code 1 2017-06-30 04:01:26 UTC [1885-2] LOG: aborting startup due to startup process failure

Denis
30.06.2017
04:03:38
Посмотрите, существует ли /var/run/postgresql и с какими правами

Daniel
30.06.2017
04:04:05
drwxrwsr-x 2 postgres postgres 40 Jun 30 04:01 .

Admin
ERROR: S client not available

Daniel
30.06.2017
04:04:37
Команду делаю: $ sudo -su postgres /usr/lib/postgresql/9.5/bin/pg_ctl start -D/etc/postgresql/9.5/main

Denis
30.06.2017
04:06:47
Ладно, безумный вопрос - после восстановления раздел /var не может read only быть смонтирован?

Daniel
30.06.2017
04:07:25
А как можно это безумно проверить? :с

Попробовать че то записать на диск?

Тоды из под рута или посгреса?

Я просто из церкви

Denis
30.06.2017
04:10:15
Напишите mount, если правильно помню, покажет все разделы и как смонтированы

Daniel
30.06.2017
04:13:12


Ох, мне кажется тут очень много неведомой фигни

У меня еще каким то фигом ssh отвалился - Connection Refused при попытке подключиться, на сервере попытки не логируются, ничего Вся каша после восстановления

$ awk '$4~/(^|,)ro($|,)/' /proc/mounts tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0

RO походу только эта фигня..

Google
Denis
30.06.2017
04:16:29
У вас ошибка говорит, что /var/lib/postgresql/9.5 не каталог кластера

Да, с var все ок в этом плане

Daniel
30.06.2017
04:19:45
Я психанул

И создал /var/run/postgresql/9.5-main.pg_stat_tmp

Теперь только логи: 2017-06-30 04:19:36 UTC [1953-65] LOG: could not open temporary statistics file "/var/run/postgresql/9.5-main.pg_stat_tmp/global.tmp": Permission denied

А

Создавал под рутом.. Фук..

Denis
30.06.2017
04:22:10
покажите ls -la для /var/run/postgresql. где-то там не те права и не для того пользователя

Daniel
30.06.2017
05:19:48
Да, поставил владельцем посгрес и ок все

Спасибо за помощь

Мне тут недавно кстати приходилось на протяжении 3 дней получать в базу около 20 запросов в секунду на запись. Потом забился каким-то фигом диск, 20 ГБ аномально забились, пробовал искать большие файлы и директории командами: $ find / -size +10M -size -12M -ls du -sch .[!.]* * |sort -h Но ничего не находилось, что могло в совокупности занять 20 ГБ После рестартнул постгрес и 20 гб освободилось на диске

Айтуар
30.06.2017
05:35:04
Daniel
30.06.2017
05:35:55
Что может там занимать столько места после ~ 10 млн запросов?

И это что-то убивается при restart

Sergey
30.06.2017
06:33:19
Коллеги, а никто не пилил мастер-мастер на pglogical?
Зачем? Есть же BDR https://www.2ndquadrant.com/en/resources/bdr/

Artem
30.06.2017
06:33:53
Ага. Попробуйте ее запустить на 9.5/9.6

Sergey
30.06.2017
06:38:03
Да, не похоже чтобы 2ndquadrant спешили портировать BDR под 9.6 - Postgres-BDR 1.0.2 on Server version 9.4.12 Released - May 18, 2017

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