
Vadim
07.09.2018
08:11:34
Короче пример. (intAutoID, intSenderID, intReceiverID) (1, 1, 2), (2,2,1), (3, 1, 3), (4, 3, 1), (5, 1, 5), (6, 5,1). Из этого дллжно получиться intAutoID 1,3,5. Либо 2, 4, 6.

Eugeny
07.09.2018
08:11:41

Ilia
07.09.2018
08:12:30
SELECT intAutoID AS intLastMessageID
FROM (
SELECT intAutoID, COUNT(1), MAX(datSentDate)
, intSenderID, intReceiverID, CONCAT(LEAST(intSenderID, intReceiverID), ":", GREATEST(intSenderID, intReceiverID)
)
AS roomkey FROM tblmessages
WHERE intSenderID != intReceiverID
GROUP BY roomkey ORDER BY intSenderID)
AS custom;
Вадим, у тебя НЕТ КРИТЕРИЕВ ОТБОРА ЗАПИСЕЙ ВООБЩЕ, как тут можно говорить о какой-то производительности ?
Говно запрос, и не будет никогда быстро работать.

Vadim
07.09.2018
08:12:39
ЗАпрос точно правильно работает, я тестил неоднократно

Google

Vadim
07.09.2018
08:12:56
НУ я ж и прошу помощи

Ilia
07.09.2018
08:12:59


Артем
07.09.2018
08:14:06
Что PK перескакивает значения -- это воообще не проблема, и никак не связано с блокировками.
Если ты конечно новые ID не сам генерируешь через (select max(id) ...)
ну там как отловили. под двумя пользователями пишется одновременно инфа в таблицу. Стоит блокировка, чтобы одновременно не записывали. В итоге одна запись записывается, вторая отбрасывается и пользователю на фронте пишется что-то типа "повторите позже". Ну это все гуд, так и задумывалось. Однако айдишник перескакивает. т.е по факту запись то одна была, значит айдишник должен увеличится на +1, но он увеличивается на+2, как будто было 2 записи. У нас на эти айдишники завязано много логики, генерация файлов и прочего. соответственно могут получаться ситуации, что из-за того, что в БД посчиталось +2, юзеру отдастся например не его счет за покупку, а счет другого пользователя. как-то так

Ilia
07.09.2018
08:14:08

Eugeny
07.09.2018
08:14:38

Vadim
07.09.2018
08:16:21
Спасибо за помощь

Ilia
07.09.2018
08:16:38


Иван
07.09.2018
08:17:09
ну там как отловили. под двумя пользователями пишется одновременно инфа в таблицу. Стоит блокировка, чтобы одновременно не записывали. В итоге одна запись записывается, вторая отбрасывается и пользователю на фронте пишется что-то типа "повторите позже". Ну это все гуд, так и задумывалось. Однако айдишник перескакивает. т.е по факту запись то одна была, значит айдишник должен увеличится на +1, но он увеличивается на+2, как будто было 2 записи. У нас на эти айдишники завязано много логики, генерация файлов и прочего. соответственно могут получаться ситуации, что из-за того, что в БД посчиталось +2, юзеру отдастся например не его счет за покупку, а счет другого пользователя. как-то так
Ох какой ужас. Извините

Ilia
07.09.2018
08:17:27

Eugeny
07.09.2018
08:17:33
в каждом подзапросе, сразу сделать группировку, только в первом случае вытаскивать
sender as col1, receiver as col2
во втором
receiver as col1, sender as col2
и потом уже на схлопывать

Andrey
07.09.2018
08:18:34
ну там как отловили. под двумя пользователями пишется одновременно инфа в таблицу. Стоит блокировка, чтобы одновременно не записывали. В итоге одна запись записывается, вторая отбрасывается и пользователю на фронте пишется что-то типа "повторите позже". Ну это все гуд, так и задумывалось. Однако айдишник перескакивает. т.е по факту запись то одна была, значит айдишник должен увеличится на +1, но он увеличивается на+2, как будто было 2 записи. У нас на эти айдишники завязано много логики, генерация файлов и прочего. соответственно могут получаться ситуации, что из-за того, что в БД посчиталось +2, юзеру отдастся например не его счет за покупку, а счет другого пользователя. как-то так
Надо сначала получать в базе ID и потом работать с ним. В чём тут проблема?

Google

Eagle Owl
07.09.2018
08:18:47

Andrey
07.09.2018
08:19:18
Вы же не получаете я надеюсь ID, например, для файла независимо от базы?

Eagle Owl
07.09.2018
08:19:19
Надо отдельно, получается станции метро делать справочник, наверно, Енам с типами помещений и др.

Ilia
07.09.2018
08:19:27
ну там как отловили. под двумя пользователями пишется одновременно инфа в таблицу. Стоит блокировка, чтобы одновременно не записывали. В итоге одна запись записывается, вторая отбрасывается и пользователю на фронте пишется что-то типа "повторите позже". Ну это все гуд, так и задумывалось. Однако айдишник перескакивает. т.е по факту запись то одна была, значит айдишник должен увеличится на +1, но он увеличивается на+2, как будто было 2 записи. У нас на эти айдишники завязано много логики, генерация файлов и прочего. соответственно могут получаться ситуации, что из-за того, что в БД посчиталось +2, юзеру отдастся например не его счет за покупку, а счет другого пользователя. как-то так
0) зачем запрещать одновременную запись?
1) Проскакивание номеров в PK -- это НЕ ПРОБЛЕМА, это by design.


Артем
07.09.2018
08:20:16

Helena
07.09.2018
08:31:53
Ребята привет! Хочу мейнтененс базе сделать, но для этого надо бы приостановить все коннекты от приложения. Не подскажете как правильнее это сделать?

Alexandr
07.09.2018
08:33:29
Запустит на другом порту к примеру
Но лучше само приложение сделать понимающим такой режим

Eugeny
07.09.2018
08:34:29

Ilia
07.09.2018
08:34:32

Helena
07.09.2018
08:35:02
а если только одну бд?) т.е. просто приостановить коннект одного пользователя к одной базе ?

Alexandr
07.09.2018
08:36:04

Helena
07.09.2018
08:37:54

Ilia
07.09.2018
08:38:24

Артем
07.09.2018
08:39:08

Eugeny
07.09.2018
08:39:32

Ilia
07.09.2018
08:40:13

Google

Ilia
07.09.2018
08:40:34

Andrey
07.09.2018
08:41:11

Ilia
07.09.2018
08:41:28

Eugeny
07.09.2018
08:41:46

Helena
07.09.2018
08:42:57

Ilia
07.09.2018
08:43:01
а как? какие есть решения?
Когда ты там будешь делать блокировку товара на списание -- дело твоё, но блокировать всю базу при вставке записей не нужно, тем более, что если пользователь только сунул товар в корзину, это ещё далеко не факт, что он его будет покупать. Так что в этот момент ничего блокировать в товарных позициях не нужно.

Eugeny
07.09.2018
08:43:03
тогда ((SenderID > ReceiverID)::int)::bit)

Ilia
07.09.2018
08:43:15

Артем
07.09.2018
08:44:14

Ilia
07.09.2018
08:44:31

Eugeny
07.09.2018
08:44:48

Ilia
07.09.2018
08:44:57

Helena
07.09.2018
08:49:30
Так порты у каждой свои...
нет, у меня один postgres работающий на порту 5432, и в нем две database) и одна из database должна ничего не почувствовать. вот

Mike Chuguniy
07.09.2018
08:56:29

Ilia
07.09.2018
08:59:32

Yaroslav
07.09.2018
09:50:55

A
07.09.2018
09:51:36
как-то можно внутри триггера проверить, сетилось конкретное поле в update запросе, повлёкшим триггер или нет?
if to_jsonb(new) ? 'field_name' then
всегда возвращает true, если в конекртно это поле в апдейте не указывать

Google

A
07.09.2018
09:51:51
pgpsql

Yaroslav
07.09.2018
09:52:48

Aleksei
07.09.2018
09:55:00

Yaroslav
07.09.2018
09:56:05
SELECT intAutoID AS intLastMessageID
FROM (
SELECT intAutoID, COUNT(1), MAX(datSentDate)
, intSenderID, intReceiverID, CONCAT(LEAST(intSenderID, intReceiverID), ":", GREATEST(intSenderID, intReceiverID)
)
AS roomkey FROM tblmessages
WHERE intSenderID != intReceiverID
GROUP BY roomkey ORDER BY intSenderID)
AS custom;
Мне кажется, что Вам нужно переписать запрос правильно, для начала.

A
07.09.2018
09:56:06

Yaroslav
07.09.2018
09:58:06

Aleksei
07.09.2018
09:58:42

A
07.09.2018
09:59:52

Yaroslav
07.09.2018
10:01:41

Ilia
07.09.2018
10:02:35

A
07.09.2018
10:02:58

Yaroslav
07.09.2018
10:03:22

A
07.09.2018
10:03:49

Yaroslav
07.09.2018
10:07:30
спасибо. это, кажется, то, что нужно
Но предупреждаю, "UPDATE OF x" проверяет именно и только то, что в UPDATE statement было:
UPDATE ... SET <x = ...>, больше ничего.
Т.е.:
1. Он сработает при "SET x = x".
2. Поле может измениться без вызова этого триггера (если кто-то его в (другом) before trigger поменяет, например).

A
07.09.2018
10:09:01

Helena
07.09.2018
10:25:37

Mike Chuguniy
07.09.2018
10:51:46

Yaroslav
07.09.2018
10:52:47

Anton [Mgn, az09@osm]
07.09.2018
11:06:51
В чем накладность? Там вроде оверхед небольшой

Google

Yaroslav
07.09.2018
11:09:26
В чем накладность? Там вроде оверхед небольшой
Вот в нём. Я помню, кто-то рассказывал о тысячах (десятках тысяч?) баз / кластеров (что-то типа shared hosting (автоматически создаваемых под каждого клиента)). Суть в том, что им было очень неудобно с кластерами. ;)

Mike Chuguniy
07.09.2018
11:35:17
В чем накладность? Там вроде оверхед небольшой
У вас сотни баз от 500 Мб до 2ГБ (мне за 9 лет в вебе не попадалось проектов, чтобы на один проект была одна база, всегда несколько). Для каждой разворачивать свою отказоустойчивую конфигурацию? Не жирно ли будет?

Zamira
07.09.2018
12:04:05
Только кластер. Я не понимаю что такое "в проекте много баз по несколько гигов"

Yaroslav
07.09.2018
12:08:20

Terminator
07.09.2018
12:38:59
@BoggArtist будет жить. Поприветствуем!

Anton [Mgn, az09@osm]
07.09.2018
12:55:38
Короче не мой юзкейс конечно. Вы тут про сервисы, а я тут почти случайно?


Yevhenii
07.09.2018
13:10:16
Всем привет. :)
Я Евгений из SoftServe.
У нас в Днепре открылась вакансия для Интермид+ Data Base Developer на один из наших проектов:
About Project:
Our Client delivers market-leading software solutions that dramatically improve visibility into the performance of converged UC networks. Our flagship offering Management Platform improves service delivery across integrated voice, data, video, and application solutions by providing critical performance information while also allowing you to manage, monitor and pro-actively troubleshoot your converged networks.
Responsibilities:
Database objects creation (table, view, functions)
Writing query (SQL, PSQL)
Query optimization and troubleshooting
Test data generation
Deployment scripts preparation
Requirements:
Good experience in any SQL database
Good experience in NoSQL databases (Redis, MongoDB, etc.)
Knowledge in DWH creation processes
Self-motivated and self-organized team member
Spoken English level – Intermediate and above
As a Plus:
Citus, Postgres native partitioning
ETL and logging process
Any experience in Logi
Experience in programming for Kafka
Some BI tool
Technology Stack:
PostgreSQL
MS SQL Server, Kafka
Logi
FlyWay, GitLab, Jenkins
Openshift
Рассматривается тот, у кого есть любая SQL, работать нужно будет с PostgreSQL и с опытом в любой NoSQL, всему что требуется на проекте - дотрейнят.
Ищем специалиста в офис в центре Днепра. У нас тепло, светло и прочие приятности от самой крупной компании в Днепре.
Английский должен быть более-менее разговорным, есть митинги с клиентом.
И зарплатный вопрос, самый важный, ведь правда ?
Мы рассчитываем, что это будет от 2к до 2,7. Можно рассматривать и более высокую, все будет зависеть от разных факторов. Так что не стесняйтесь писать, даже если ваши пожелания не вмещаются в вилку )
Можете написать мне сюда (в Телеграм) или отправить всю информацию о себе на почту ysukh@softserveinc.com
Жду ваших писем и сообщений )
На всякий случай, вот ссылка на вакансию на нашем сайте - https://career.softserveinc.com/uk-ua/vacancy/14252-db-software-engineer
Если есть вопросы - пишите )


Eugeny
07.09.2018
13:19:00
Тепло, светло, это понятно, а что с сыростью в центре днепра, это ведь река если я не ошибаюсь?

Igor
07.09.2018
13:19:24

Yevhenii
07.09.2018
13:24:53

Eugeny
07.09.2018
13:25:35
Ага уже посмотрел по украински днiпро )

Oleg
07.09.2018
13:26:15

Igor
07.09.2018
13:28:06
от дотошный :)

Oleg
07.09.2018
13:29:59
Та сам только сегодня прочитал

Yevhenii
07.09.2018
13:30:24
В общем, подытожим ?
SoftServe Dnipro - ждет всех желающих на эту вакансию ?


Yaroslav
07.09.2018
13:37:10
Всем привет. :)
Я Евгений из SoftServe.
У нас в Днепре открылась вакансия для Интермид+ Data Base Developer на один из наших проектов:
About Project:
Our Client delivers market-leading software solutions that dramatically improve visibility into the performance of converged UC networks. Our flagship offering Management Platform improves service delivery across integrated voice, data, video, and application solutions by providing critical performance information while also allowing you to manage, monitor and pro-actively troubleshoot your converged networks.
Responsibilities:
Database objects creation (table, view, functions)
Writing query (SQL, PSQL)
Query optimization and troubleshooting
Test data generation
Deployment scripts preparation
Requirements:
Good experience in any SQL database
Good experience in NoSQL databases (Redis, MongoDB, etc.)
Knowledge in DWH creation processes
Self-motivated and self-organized team member
Spoken English level – Intermediate and above
As a Plus:
Citus, Postgres native partitioning
ETL and logging process
Any experience in Logi
Experience in programming for Kafka
Some BI tool
Technology Stack:
PostgreSQL
MS SQL Server, Kafka
Logi
FlyWay, GitLab, Jenkins
Openshift
Рассматривается тот, у кого есть любая SQL, работать нужно будет с PostgreSQL и с опытом в любой NoSQL, всему что требуется на проекте - дотрейнят.
Ищем специалиста в офис в центре Днепра. У нас тепло, светло и прочие приятности от самой крупной компании в Днепре.
Английский должен быть более-менее разговорным, есть митинги с клиентом.
И зарплатный вопрос, самый важный, ведь правда ?
Мы рассчитываем, что это будет от 2к до 2,7. Можно рассматривать и более высокую, все будет зависеть от разных факторов. Так что не стесняйтесь писать, даже если ваши пожелания не вмещаются в вилку )
Можете написать мне сюда (в Телеграм) или отправить всю информацию о себе на почту ysukh@softserveinc.com
Жду ваших писем и сообщений )
На всякий случай, вот ссылка на вакансию на нашем сайте - https://career.softserveinc.com/uk-ua/vacancy/14252-db-software-engineer
Если есть вопросы - пишите )
Вы бы сразу писали, есть вообще вариант удалёнки или нет...
> Мы рассчитываем, что это будет от 2к до 2,7
Ну-ну. А потом говорят "ах, специалистов не найдёшь!". ;)
> Writing query (SQL, PSQL)
(Въедливо) Один запрос надо будет написать? ;)


Yevhenii
07.09.2018
13:41:36