
Sergey
03.08.2017
15:56:29
да не за что )))

Roman
04.08.2017
09:45:57
вем привет,какой тип данних использовать для числа от 0.0 до 100.0?

Lev
04.08.2017
09:48:10
смотря какие требования

Stas
04.08.2017
09:50:25

Google

Stas
04.08.2017
09:51:49
а если серьезно, то https://www.postgresql.org/docs/9.6/static/datatype-numeric.html читайта про numeric

Денис
04.08.2017
10:15:07
Всем привет
Вот есть у меня запрос. Не поможете его упростить, а то на продакшене - он 3 секунды выполняется - много.
SELECT user_email,
dc.count camera_cc,
tc.count server_cc,
sc.count service_cc
FROM _users
LEFT JOIN (SELECT user_email, count(device_guid) count
FROM _devices
WHERE
device_type = 'Camera'
GROUP BY user_email
) AS dc USING (user_email)
LEFT JOIN (SELECT user_email, count(device_guid) count
FROM _devices
WHERE
device_type = 'Server'
GROUP BY user_email
) AS tc USING (user_email)
LEFT JOIN (SELECT user_email, count(service_id) count
FROM
_services LEFT JOIN _resources ON _services.resource_id = _resources.resource_id
LEFT JOIN _devices USING (device_id)
GROUP BY user_email)
AS sc USING (user_email);

Mike Chuguniy
04.08.2017
10:29:40
Было бы неплохо посмотреть на мощь участвующих таблиц (хотя бы порядок количества записей) и EXPLAIN ANALIZE. Ну это для начала.

Денис
04.08.2017
11:38:50
А так в таблице юзеров в районе 300к записей. В девайсах примерно в 10 раз больше.

Mike Chuguniy
04.08.2017
11:38:55
Нужен вывод команды EXPLANE ANALIZE
также сильно интересует объём оперативной памяти и, для начала, значение shared_buffers

Alexander
04.08.2017
11:50:25
Как такие красивые картиночки рисуете, если не секрет?

Andrey
04.08.2017
11:53:09

Ruslan
04.08.2017
11:56:53
Вообще вот тут вроде красивее рисуют: http://tatiyants.com/postgres-query-plan-visualization/

Andrey
04.08.2017
12:02:24

Ruslan
04.08.2017
12:04:57

Аггей
04.08.2017
12:06:08
Еще и опенсорс

Google

Mikhail
04.08.2017
13:18:05
Всем привет! Есть столбец с текстовым полем
Все значения в ней уникальны
это нормально использовать её в качестве первиного ключа?
Или лучше айдишники запилить?

Darafei
04.08.2017
13:19:47
а он по сути является первичным ключом?
а так вообще первичный ключ в таблице необязательное явление

Mikhail
04.08.2017
13:21:04
просто я когда то слышал, что мол первичные текстовые ключи зло

Darafei
04.08.2017
13:22:32
не то что зло, просто есть возможность огрести

Mikhail
04.08.2017
13:24:21

Alexey
04.08.2017
13:24:21
Обычно лучше использовать под первичный ключ колонку, которая не несёт другой смысловой нагрузки. Вдруг вы текст поменять захотите, например.

Darafei
04.08.2017
13:25:53
gis=# create table aaa (id text primary key);
CREATE TABLE
gis=# insert into aaa SELECT array_to_string(ARRAY(
SELECT chr((ascii('B') + round(random() * 25)) :: integer)
FROM generate_series(1,100005)),
'');
ERROR: index row requires 100024 bytes, maximum size is 8191
например, окажется, что нельзя сделать больше 8191 байта строки, потому что btree не умеет
это не проблема семантики, это проблема btree, которым сделан unique / pkey
но когда огребёшь, скажут "а надо было числовые делать" :)

Andrey
04.08.2017
14:25:46
Ребят, а в pg 9.5 ограничить коннекты по ip для конкретных юзеров можно только через конфиг? На лету никак?

Ruslan
04.08.2017
14:30:09

Айтуар
04.08.2017
14:32:32

Alexey
04.08.2017
14:35:06

Vova
04.08.2017
14:37:44
iptables ?
как реализовать такое для разных юзеров?

Alexey
04.08.2017
14:38:02

Google

Vova
04.08.2017
14:38:19
ты написал айпитеблс
мне вот интересно стало))

Алексей
04.08.2017
14:40:30
"ограничить коннекты по ip для конкретных юзеров" в iptables? Мне вот тоже интересно.

Alexey
04.08.2017
14:43:01
Ну всегда можно написать модуль для iptables, который парсит запросы и на уровне ядра их отбивает. А так я просто в глаза долблюсь.

Vova
04.08.2017
14:45:31
норм так юзерам отвечать)))

Sergey
04.08.2017
14:46:31
Можно попробовать собрать такое в рамках PAM-аутентификации и подключить штатно в Postgres

Vova
04.08.2017
14:46:59
а постгре через пам ходит?

Sergey
04.08.2017
14:49:10
а постгре через пам ходит?
Не "через пам" а может использовать PAM как механизм аутентификации. https://www.postgresql.org/docs/current/static/auth-methods.html
Можно например его убедить использовать /etc/shadow вместо своей внутренней аутентификации

Vova
04.08.2017
14:50:34
даже лдап умеет, прикольно))

Сергей
04.08.2017
15:00:08
Ребят, нужен ваш совет по постгресу(9.6)
Есть веб-сервис ненагруженный и из него периодически делается большой отчет, который минут 10 генерится. Отчет не на sql, а в питоне сделан. много запросов. И есть такая проблема - за то время, пока он генерится что-то меняется в базе и отчет становится неверным. Все транзакции сейчас read commited. Есть иде обернуть генерацию отчета в serialisable. Отчет это readonly операция.
Судя по документации, это норм. 2 вопроса -
1)могут ли обычные транзакции или сам отчет упасть с serialization anomaly? (вроде нет, но не уверен)
2) видити ли вы какие-то подводные камни в этом рещении?

Fike
04.08.2017
15:04:58
> сам отчет упасть с serialization anomaly?
> detection of the conditions which could cause a serialization anomaly will trigger a serialization failure.

Ruslan
04.08.2017
15:07:25

Сергей
04.08.2017
15:13:36

Fike
04.08.2017
15:16:20
Ну, приложение же у тебя пишет в это время?

Сергей
04.08.2017
15:16:53
да. но с уровнем изоляции read commited
по идее readonly serialisable транзакция просто не должна это видеть. это то, что мне надо

Admin
ERROR: S client not available

Google

Pavel
04.08.2017
15:19:18
Если тот кто пишет, закомитит транзакцию, то по идее читающий будет видеть новые данные

Fike
04.08.2017
15:19:25
уровень изоляции в другой транзакции не играет роли

Pavel
04.08.2017
15:19:43
Не может же транзакция держать в памяти полный слепок данных в БД на момент ее старта.

Fike
04.08.2017
15:20:23
Serializable физически не может увидеть новые данные. Это уровень изоляции, который говорит "заставь хоть ждать транзакции завершения друг друга, но пусть у меня будет единая последовательная история".

Pavel
04.08.2017
15:20:47
хммм
Да ты прав, ну тогда это рабочее решение.
Можно его проверить, написав маленькую эмулирующую программу.

Fike
04.08.2017
15:24:20
по идее нужен просто repeatable read. но я не знаю, что будет, когда он начнет пытаться читать обновленные данные (откатится сразу, проигнорирует) и даст ли нормально закоммититься, если там только чтение.

Сергей
04.08.2017
15:29:18
repeatable от serialisable отличается в основмном тем, что первый видит новые записи, а второй нет. измененные они оба не видят. и мне нужен второй

Mikhail
04.08.2017
15:29:44

Сергей
04.08.2017
15:32:53
ребята, так на вопрос кто-нить может ответить?)

Fike
04.08.2017
15:34:10
The Repeatable Read isolation level only sees data committed before the transaction began; it never sees either uncommitted data or changes committed during transaction execution by concurrent transactions.
serializable на длинные вещи точно нельзя ставить
Я не знаю деталей имплементации, но он по стандарту имеет право поставить тебе колом все остальные запросы. С учетом того, что у тебя явно пересекаются читаемые и обновляемые данные, скорее всего он будет стрелять в ногу разве что не из минигана.

Andrey
04.08.2017
15:38:53
Можно использовать serializable, но могут быть проблемы, вызванные блокировками.

Сергей
04.08.2017
15:39:50
а что именно блокироваться будет?
я сделал ручное тестирование и есть тесты на это. все работает. но мне нужна консультация бывалых

Mike Chuguniy
04.08.2017
15:42:06
Serializable Isolation Level
... If either transaction were running at the Repeatable Read isolation level, both would be allowed to commit; ...
Т.е. для обеспечения Serializable надо, чтобы все остальные также были Serializable.
https://www.postgresql.org/docs/9.6/static/transaction-iso.html
И оно же на русском:
https://postgrespro.ru/docs/postgrespro/9.6/transaction-iso.html
Так что, если вокруг read committed, то выше repeatable read ставить просто не имеет смысла.

Google

Сергей
04.08.2017
15:44:16
Т.е. для обеспечения Serializable надо, чтобы все остальные также были Serializable. - откуда такой вывод? у меня readonly resialasable транзакция. конфкликтов в принципе быть не может

Mike Chuguniy
04.08.2017
15:46:36
Если бы одна из этих транзакций работала в режиме Repeatable Read, зафиксироваться могли бы обе; - мне достаточно этой фразы, чтобы сделать вывод о том, чтобы обеспечить Serializable, надо всё вокруг делать Serializable. Вы можете думать по-другому.

Сергей
04.08.2017
15:47:53
я думаю, что это не так

Mike Chuguniy
04.08.2017
15:48:10
Проверьте. Делов-то.

Сергей
04.08.2017
15:48:28
это потому что serializable гаранитирует "аномалия сериализации
Результат успешной фиксации группы транзакций оказывается несогласованным при всевозможных вариантах исполнения этих транзакций по очереди."

Andrey
04.08.2017
15:48:34
а что именно блокироваться будет?
Я имел в виду предикатные блокировки: https://stackoverflow.com/questions/12837708/predicate-locking-in-postgresql-9-2-1-with-serializable-isolation

Сергей
04.08.2017
15:48:40
да я проверял) и все работает