@pgsql

Страница 497 из 1062
Artyem
04.10.2017
11:05:37
Надо бы мат-часть подтянуть. https://www.youtube.com/watch?v=Asicqi0ewO8
посмотрел, за исключением некоторых мелочей, вроде всё знаю. и какраз обладая этими знаниями у меня и возникает непонимание. Из написанного мной может не совсем понятно в чём суть претензий. есть пользователь A - не суперпользователь, не наследует никаких ролей. есть пользователь B Под пользователем B создаю БД, это пользователь владелец данной БД. Смотрю в выданные права на данную бд, что в консоли, что в PgAdmin4 мне выдаёт что НЕТ никаких выданных прав. В этот момент я предполагаю, что никто кроме владельца БД (Пользователь B) к ней не подключиться. Но оказывается что пользователь A, совершенно спокойно коннектится к этой БД. я на этом моменте довольно сильно завис. REVOKE CONNECT ON DATABASE test2 FROM PUBLIC;после вызова этой команды возможность подключаться у пользователя A пропала, но никакого упоминания что public вообще имеел возможность подключаться к БД небыло! даже если где-то такое поведение задокументировано, это ни разу нелогично.

Dmitry
04.10.2017
11:09:10
Вы посмотрите не на искосок, а вдумчиво. Тогда странные вопросы задавать не будете. И то, что кажется странным, станет очевидным.

Denis
04.10.2017
11:31:53
Привет всем, нужен совет. Есть таблица вида create table info(patid integer, stamp timestamptz, fullname text, constraint test_pk primary key (patid, stamp)); create index info_trgm_idx on info using gin (fullname);где лежат разные временные версии пациента. Это сделано для возможности иметь полную картину на произвольный срез времени и архивного поиска. Я бы хотел при поиске подстроки в fullname иметь возможность отобрать первые N уникальных пациентов, а не строк. То есть я не могу написать select * from info where fullname ~* 'смирнов дени' limit 10;так как не знаю, сколько найдется Денисов и сколько у каждого из них версий. Я могу вначале выбрать все результаты, а потом отрезать нужное количество... но вопрос именно в том, можно ли ускорить выборку аналогом limit для такой схемы хранения. Чтобы по мере нахождения новых строк считалось уникальное количество пациентов в pipeline mode и достигнув предела запрос прекращался.

Google
Andrey
04.10.2017
11:34:59
Привет всем, нужен совет. Есть таблица вида create table info(patid integer, stamp timestamptz, fullname text, constraint test_pk primary key (patid, stamp)); create index info_trgm_idx on info using gin (fullname);где лежат разные временные версии пациента. Это сделано для возможности иметь полную картину на произвольный срез времени и архивного поиска. Я бы хотел при поиске подстроки в fullname иметь возможность отобрать первые N уникальных пациентов, а не строк. То есть я не могу написать select * from info where fullname ~* 'смирнов дени' limit 10;так как не знаю, сколько найдется Денисов и сколько у каждого из них версий. Я могу вначале выбрать все результаты, а потом отрезать нужное количество... но вопрос именно в том, можно ли ускорить выборку аналогом limit для такой схемы хранения. Чтобы по мере нахождения новых строк считалось уникальное количество пациентов в pipeline mode и достигнув предела запрос прекращался.
Можно оконными функциями это сделать. Но я бы советовал всё-таки хранить данные в какой-нибудь нормальной форме, а версию записей в отдельной таблице. Всё-таки, насколько я понимаю, чаще всего приходится иметь дело именно с актуальными дынными.

Складывать записи в версионную таблицу можно либо триггером (причём достаточно будет одной процедуры на все таблицы), либо использовать готовые решения для этого.

Artem
04.10.2017
11:37:38
Denis
04.10.2017
11:39:40
Заведите флаг is_actual и сделайте по нему индекс.
мне нужно искать не по последним версиям, а по всему массиву данных, даже старым записям. например, для поиска по девичьей фамилии. поверьте, у меня сейчас в базе схема с актуальной табличкой и таблицей аудита. и я осознанно съежаю с нее на этот вариант

тут возможно, полезно будет использовать еще hstore для быстро получения самих версий пациента
кстати, никогда не пользовался hstore. сейчас гляну, может ли он мне помочь

Artyem
04.10.2017
11:41:49
Вы посмотрите не на искосок, а вдумчиво. Тогда странные вопросы задавать не будете. И то, что кажется странным, станет очевидным.
нет, раз вы уверяете что так и должно быть, я попытаюсь понять данную логику, с правами которые не отображаются, но они есть. Но признать это нормальным я вртяли смогу. спасибо за уделённое время.

Mike Chuguniy
04.10.2017
11:42:03
hstory заменяется на jsonb, не стоит его использовать, запросто могут выкинуть.

Вернее, выкинут. В скором будущем.

Denis
04.10.2017
11:42:45
Mike Chuguniy
04.10.2017
11:43:10
Но на jsonb посмотреть, я думаю, стоит.

Google
Denis
04.10.2017
11:45:23
Но на jsonb посмотреть, я думаю, стоит.
то есть вы предлагаете все полностью запихивать в jsonb. типа patid -> версии? это будет больно, не хочу терять нормализацию ради одной оптимизации

Mike Chuguniy
04.10.2017
11:45:58
Что вас заставило предположить такое непотребство?! о_О

Дожил, блин. До седой лысины...

Denis
04.10.2017
11:48:04
Что вас заставило предположить такое непотребство?! о_О
извиняюсь) тогда разверните мысль про jsonb

Artyem
04.10.2017
11:52:28
Нормально. https://postgrespro.ru/docs/postgresql/9.6/sql-grant внимательно изучить пункт GRANT для объектов баз данных
Я себя уже крайне глупо чувствую. эту вещь я читал ещё до того как задать вопрос (2 раза) вы хотели обратить моё внимание на вот этот пункт: PostgreSQL по умолчанию назначает группе PUBLIC определённые права для некоторых типов объектов. Для таблиц, столбцов, схем и табличных пространств PUBLIC по умолчанию никаких прав не имеет. Для других типов объектов PUBLIC имеет следующие права: CONNECT и CREATE TEMP TABLE — для баз данных;?

Mike Chuguniy
04.10.2017
11:54:31
извиняюсь) тогда разверните мысль про jsonb
jsonb - это к тому, что в голове отложилась именно замена hstore->jsonb. По-моему, даже на уровне ядрёной команды ПГ. Всё ручонки не доходят потискать. :(

@aklim007 да, именно.

А ещё на то, что права, предоставляемые по-умолчанию, не отображаются в выводе соответствующих команд

Artyem
04.10.2017
11:56:56
А ещё на то, что права, предоставляемые по-умолчанию, не отображаются в выводе соответствующих команд
так к этому у меня и притензии, и именно это я и считаю дырой в безопасности. права которые не видно но которые есть - этож жесть, явное лучше неявного.

Dmitry
04.10.2017
11:58:23
нет, раз вы уверяете что так и должно быть, я попытаюсь понять данную логику, с правами которые не отображаются, но они есть. Но признать это нормальным я вртяли смогу. спасибо за уделённое время.
Вы так рассуждаете, будто у пользователей ПГ есть собственный выбор, кроме как запилить свой форк с шахматами и фрейлинами. Логика очень простая и понятная: есть роль public. Права этой роли наследуют все. Права, унаследованные от public не отображаются. Если при создании БД вы не отозвали у public привелегии - вы сами себе злобный буратино.

Можете создать пустую БД, отстроить права и дальше использовать как темплейт под прод

Artyem
04.10.2017
12:11:15
Вы так рассуждаете, будто у пользователей ПГ есть собственный выбор, кроме как запилить свой форк с шахматами и фрейлинами. Логика очень простая и понятная: есть роль public. Права этой роли наследуют все. Права, унаследованные от public не отображаются. Если при создании БД вы не отозвали у public привелегии - вы сами себе злобный буратино.
тут в том числе и разработчики из PgPro присутствуют, ну и стало понятно что я всё правильно понимаю, и это действительно такое поведение БД (на мой взгляд не правильное) Я вот представляю как я буду админам рассказывать это, а вот тут вы создали бд, вот тут можно посмотреть права на данную бд, но тут на самом деле не все права, а есть ещё скрытые которые не видно, на меня как на идиота посмотрят. тут встанет закономерный вопрос сколько ещё такой магии, которая не логична и ради которой надо изучить вдоль и поперёк документацию (никто из них этого делать не будет). Продукт должен стремиться к уменьшению порога входа и уменьшению "магии". с темплейтов уже отозвал эти права.

Dmitry
04.10.2017
12:16:45
Нам с напарником как ex-OracleDBA это тоже кажется странным. Но вы так говорите, как будто есть какой-то шанс это поменять. Можете написать в хакерс и 5-10 лет бодаться с сообществом. Можете попросить тех же разработчиков из ПГПРО рассказать, как не от хорошей жизни пришлось запилить RUM индекс в виде екстеншена и то это стало возможным только в 9.6 с появлением возможности писать свои акцесс-методы. И ещё про кучу фич, которые не удалось протащить в мейстрим. Хотя ребята молодцы и даже то, что протаскивается - очень круто.

Denis
04.10.2017
12:35:13
оконные функции в pg требуют вначале вытащить все данные и проагрегировать их, никакого piplene mode тут не получится((
А вот старый добрый group by не требует получение всех данных для последующей группировки и может работать в pipeline mode. Все решалось банальной конструкцией вида select * from info where patid = any ( select patid from info where fullname ~* 'смирнов' group by patid limit 3 );То есть разница с лимитом в виде group by: с group by запрос выполняется 0.1 с, а без (более 1000 строк) - 6 секунд.

vladget
04.10.2017
12:36:33
Чем можно экспортнуть схему в json или yaml? есть какие-то проверенные cli тулзы?

vladget
04.10.2017
12:41:56
Google
Darafei
04.10.2017
13:02:01
По моему опыту админы такое не читают, а действуют железобетонными методами "мы вас по разным машинам развели и по vpn отдельно завайтистили"

Darafei
04.10.2017
13:06:09
Ну и ещё ldap-юзеров для аудита прикручивают

Артур
04.10.2017
13:08:33
Ну а вообще это речь об "общих" админах. По мне так нужен именно админ бд. Я вот почитал доку - понял кажись чего плстгис недоапнулась. Линки переписввать не пришлось. Просто в бд нужно было вызвать экстеншн апдейт. У меня на сервере, даже со 127.* вход строго по паролю. Вероятно не удалось базы в кластере апнуть без постгрис пользователя

Artyem
04.10.2017
13:10:16
почему ваши админы не захотят читать документацию?
Несоразмерность усилий и результата, это мне как разработчику интересен PG, в некоторых внутренних проектах я его сам и админю (как и ещё ряд разрабов). и составляет это всё очень небольшую часть от Mysql(этим какраз админы линуксоиды занимаются, как и самими серверами на линуксе) и MSsql(это уже отдельные личности). Работы у них и так непочатый край. Вдруг резко тратить кучу усилий на осваивание PG им даже просто никто не даст.

Артур
04.10.2017
13:11:42
Кстати, вопрос. А есть сертифицированая специальность администратор pg? Вот в оракл кажется есть

Артур
04.10.2017
13:14:37




Значит можно прям в штат такого искать с бумажкой. ? Это получается не просто придуманная должность.

Artyem
04.10.2017
13:17:47
Завели инстанс rds и в путь
не в жись не одобрят использование подобного внешнего сервиса, всё должно быть на наших серваках в нашей сети

Alex
04.10.2017
13:18:58
есть еще по поводу сертификации https://postgrespro.ru/blog/company/17763

Eugene
04.10.2017
13:36:59
Есть таблицы A,B,C. Связь многие ко многим т.е. A->B и B->C. Нужно объединить таблицы в одну. Назовем её D. Нужно при изменении данных в таблице D изменить в соответствии другие таблицы. Вопрос: есть что-нить уже готовое или нужно будет создавать таблицу и через триггеры все делать?

Lev
04.10.2017
13:38:48
view?

Google
Artyem
04.10.2017
13:38:54
Так они еще и железки чинят?
нет, но отвечают за работоспособность, администрируют, настраивают, определяют какое железо закупить (относительно серваков за которые отвечать будут они), вирутализация и всякое такое...

crux
04.10.2017
13:43:18
в общем, мексиканцы

Artyem
04.10.2017
13:56:34
А архитектор у вас выделенный есть? :)
Архитектор чего? Работаю в провайдере, и архитекторов тут немало. Как software arhitech и сам выступаю в ряде проектов.

Darafei
04.10.2017
14:01:18
Я просто пытаюсь представить себе человека, который нарисовал стопку консервных банок, символизирующих базу сервиса, и нарисовал к ней стрелочки не только от приложения-потребителя, так, что потребовалось гранулярно рулить правами на уровне базы.

Возможно, есть какая-то специфика, конечно

Dmitry
04.10.2017
14:04:07
EDB сертифицирует. Но, думаю, что это не так распиарено и востребовано как с Oracle.

Но они по своек коммерческой версии БД серт выдают, если я правильно помню.

Darafei
04.10.2017
14:38:57
Эм, а почему так? Как будет выглядеть разъезжание, когда кто-то сожрет все ресурсы?

Один запрос-крешер и все сервисы в дауне на рекавери огромного общего wal?

Artyem
04.10.2017
14:57:45
Эм, а почему так? Как будет выглядеть разъезжание, когда кто-то сожрет все ресурсы?
именно сервисы способные выжрать все ресурсы по отдельным инстансам и раскидываются. большое количество всяких веб интерфейсов (именно такой случай), которые не генерируют больших нагрузок, не оперируют сложными запросами, и редко хранят больше 1-2 GB данных, десятками объединяются на одном инстансе (больше всего такого сейчас на mysql крутиться), запас по производительности обычно всегда есть.

Darafei
04.10.2017
15:03:21
Я так heroku ронял, их общая инсталляция минут 15 поднимается

Артамонов Игорь
04.10.2017
16:44:04
Коллеги, можно ли как-то сконфигурить другое расположение для pg_xlog, например в pg_xlog_reserve ?

легкая ссылка - не вариант

диск смонтирован на эту точку. Через postgresql.conf это как-то конфижится?

nietzschebrod
04.10.2017
16:50:06
не конфижится. лёгкая ссылка - это симлинк штоле? почему не вариант?

Артамонов Игорь
04.10.2017
16:57:09
диск смонтирован на эту точку. Через postgresql.conf это как-то конфижится?

Артамонов Игорь
04.10.2017
17:00:08
Жаль :(

Google
Alex
04.10.2017
17:00:08
символьная ссылка

Артамонов Игорь
04.10.2017
17:00:09
окей

Alex
04.10.2017
17:00:49
жаль, не спорю. пока есть ссылки это никто менять не будет я думаю

nietzschebrod
04.10.2017
17:06:23
Диск смонтирован на эту точку и поэтому не работают символьные ссылки?

Артамонов Игорь
04.10.2017
17:37:51
Дык эцсамое, там надо было каталог этот удалить

и повесить в этот локейшен ссылку

но не суть - подняли систему, расширили диск

Вопрос такой

БД срет ошибками в лог: < 2017-10-04 20:37:08 MSK > ОШИБКА: запрошенный сегмент WAL 00000001000005F40000006E уже удалён

Но при этом сама система вроде поднялась и работает

Диагностировать это можно как-то?

Реплика сдохла, все, вопрос закрыт

Diskord
04.10.2017
20:05:01
Подскажите, аналогом ораклового merge, является UPSERT?

Alex
04.10.2017
22:49:09
нет

merge более общий

при портировании необходимо внимательно смотреть на условия в merge

/dev/null
05.10.2017
04:02:30
Кто знает как в firebird параметры запроса передать...

В postgresql через $ передается

ros
05.10.2017
04:55:38

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