
Slach
04.10.2017
10:59:30


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 и достигнув предела запрос прекращался.
Можно оконными функциями это сделать. Но я бы советовал всё-таки хранить данные в какой-нибудь нормальной форме, а версию записей в отдельной таблице. Всё-таки, насколько я понимаю, чаще всего приходится иметь дело именно с актуальными дынными.
Складывать записи в версионную таблицу можно либо триггером (причём достаточно будет одной процедуры на все таблицы), либо использовать готовые решения для этого.


Denis
04.10.2017
11:36:01

Artem
04.10.2017
11:36:09

Andrey
04.10.2017
11:37:36

Artem
04.10.2017
11:37:38

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

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

Andrey
04.10.2017
11:44:20

Mike Chuguniy
04.10.2017
11:45:22


Denis
04.10.2017
11:45:23

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

Denis
04.10.2017
11:48:04

Artyem
04.10.2017
11:52:28

Mike Chuguniy
04.10.2017
11:54:31
@aklim007 да, именно.
А ещё на то, что права, предоставляемые по-умолчанию, не отображаются в выводе соответствующих команд

Artyem
04.10.2017
11:56:56

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


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

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

Denis
04.10.2017
12:38:27

vladget
04.10.2017
12:41:56

Google

Alex
04.10.2017
12:58:28

Марат
04.10.2017
13:01:10

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

Артур
04.10.2017
13:03:24

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

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

Darafei
04.10.2017
13:09:29

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

Darafei
04.10.2017
13:10:18
Просто пакеты пакуют так, чтобы так поставить нельзя было, обычно

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

Darafei
04.10.2017
13:12:26

Артур
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

Darafei
04.10.2017
13:20:04

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
в общем, мексиканцы

Darafei
04.10.2017
13:46:39

Artyem
04.10.2017
13:56:34

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

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

Artyem
04.10.2017
14:37:37

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 это как-то конфижится?

Alex
04.10.2017
16:59:57

Артамонов Игорь
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