@pgsql

Страница 280 из 1062
Alex
23.03.2017
15:32:08
бывает просто контекст уводит куда то от очевидных вещей

потом снова смотришь - и всё просто было )

Alexey
23.03.2017
15:32:35
Или в where
Если в WHERE пишу, то он даже при LEFT JOIN выкидывает те, для которых не было записей в b за последний час :-/

Darafei
23.03.2017
15:33:28
А почему left join?

Google
Andrey
23.03.2017
15:33:41
Запрос-то покажите, не стесняйтесь

а то телепаты в отпуску.

сволочи.

Alexey
23.03.2017
15:35:10
SELECT a.id, COUNT(b.id) FROM a JOIN b ON b.a_id = a.id WHERE (b.time_stamp > NOW() - '1 hour'::INTERVAL) GROUP BY a.id; Having c order я не втыкал пока даже туда.

Darafei
23.03.2017
15:36:36
А min(b.time_stamp) в колонках что вернет?

А то мало ли таймзона поехала

Alexey
23.03.2017
15:39:32
А min(b.time_stamp) в колонках что вернет?
Данные в b там такие: id | time_stamp | a_id ----+-------------------------------+------ 1 | 2017-03-23 17:33:53.709287+03 | 1 2 | 2017-03-23 17:33:53.709287+03 | 1 3 | 2017-03-23 17:33:53.709287+03 | 1 4 | 2017-03-23 15:34:22.883281+03 | 2 5 | 2017-03-23 15:34:22.883281+03 | 2 6 | 2017-03-23 15:34:22.883281+03 | 1 SELECT min(time_stamp) FROM b min ------------------------------- 2017-03-23 15:34:22.883281+03

Если ставлю просто WHERE b.timestamp > .... То он выбирает только первые 3 записи, a_id для всех 1, поэтому тот большой запрос выводит 1, 3

Darafei
23.03.2017
15:41:55
А что не так?

Alexey
23.03.2017
15:42:24
А что не так?
А мне надо получить 1, 3 2, 0 3, 0

Darafei
23.03.2017
15:44:05
А, меньше. Тогда подзапросом в колонке (select count(*) from b where b.A_ID = a. Id)

У кого какая клавиатура на телефоне для набора SQL без боли?

Igor
23.03.2017
15:48:18
Google Keyboard с минимальной задержкой для вставки спецсимволов по зажатию клавиши но мне, слава богам, не приходится SQL или какой еще код писать на телефоне

Google
lemi
23.03.2017
15:48:38
если так прямо select * from a where ( select count(backend_version.a_id) cnt from b where b.a_id = a.id and b.time_stamp between current_timestamp and (current_timestamp - interval '1 hour') ) < 10 order by value

Darafei
23.03.2017
15:49:55
А битвин так отработает, большее, а потом меньшее?

Alexey
23.03.2017
15:52:50
А, меньше. Тогда подзапросом в колонке (select count(*) from b where b.A_ID = a. Id)
Всё, завелось, спасибо большое. Вот так получилось в итоге: SELECT a.id, ( SELECT COUNT(*) FROM b WHERE b.a_id = a.id AND b.time_stamp > NOW() - '1 hour' :: INTERVAL ) FROM a JOIN b ON b.a_id = a.id GROUP BY a.id;

lemi
23.03.2017
15:56:39
а где здесь меньше 10

Alexey
23.03.2017
15:57:38
Это в процессе

Max
23.03.2017
16:27:26
как вариант вот так select distinct id from ( SELECT a.id, count(*) OVER (PARTITION BY a.id) AS cnt FROM a, b WHERE b.aid = a.id AND b.ts >= '2017-03-22 19:00:00' )t where cnt < 10

но время я так от балды написал

Alexey
23.03.2017
16:28:53
А к результату subquery через алиас нельзя обращаться в having?

Max
23.03.2017
16:29:58
только не могу сказать насколько он оптимальный получается, первое что в голову пришло

Darafei
23.03.2017
16:34:32
А к результату subquery через алиас нельзя обращаться в having?
можно завернуть всё в ещё один select * from (select ... ) where x < n;

Max
23.03.2017
16:48:01
а так вот идея хорошая http://sqlfiddle.com/ но не рабочая она какая-то, глючит

Darafei
23.03.2017
16:49:01
постгиса там нет :(

Max
23.03.2017
16:49:39
да нет, но хоть так ) обменивать простенькими скриптами и тестить их

глючит только как не знаю кто)

надо напилить бота телеграмм, как fiddle ))

Andrey
24.03.2017
05:34:39
только не могу сказать насколько он оптимальный получается, первое что в голову пришло
А кстати, задачка-то с подвохом. Представьте себе, что строк ну очень много. Какой-нибудь мониторинг в "кrававам ынтырпrайзе". Т.е. делать индекс по таймстампу - самоубийственное решение.

Lulz
24.03.2017
06:11:18
всем привет! как в партицировании сделать запись по интервалу

само условие

а вот, вроде сделал, осталось посчитать

Google
Darafei
24.03.2017
06:57:50
суммировать что?

ты делаешь операцию над одной строкой

Ildar
24.03.2017
08:07:30
Max
24.03.2017
08:21:43
А кстати, задачка-то с подвохом. Представьте себе, что строк ну очень много. Какой-нибудь мониторинг в "кrававам ынтырпrайзе". Т.е. делать индекс по таймстампу - самоубийственное решение.
под интерпрайзом я понимаю тяжелую заковыристую бизнес логику, тут я думаю как раз особых проблем нет - оперативную информацию делжать в одной таблице, архивы в другой (именно для этого запроса, кгда нужно анализировать за ближайшее веремя). Другое дело когда датчики какие-нибудь и тысячи транзакций в секунду а то и больше

Alex
24.03.2017
09:10:05
Доброго времени суток, подскажите бесплатную утилиту для конвертации таблиц oracle в postgresql со своими FK, данные не обязятельно но желательно

желательно чтоб работало на windows

Kirill
24.03.2017
09:11:39
Есть какая-то дичь, написанная на перле. Для простых случаев, вроде, работает

Аггей
24.03.2017
09:11:41
А кроме ora2pg вообще есть что-то?

Kirill
24.03.2017
09:12:06
Ага, она )

Alex
24.03.2017
09:12:11
вот бы в pgloader добавили возможность миграции с оракла

Dmitry
24.03.2017
09:24:25
В миграции с оракла главная боль - это хранимый код. Это не просто боль, а БОЛЬ. Если у вас бизнес-логика лежит в базе, любая тулза по миграции лишь чуть-чуть облегчит вам задачу, но не более того.

Alex
24.03.2017
09:25:49
мне только нужно таблицы перенести , что посоветуете ?

ora2pg ?

Dmitry
24.03.2017
09:26:54
Я думаю, вполне.

Admin
ERROR: S client not available

lemi
24.03.2017
09:44:22
жди

Google
Dmitry
24.03.2017
09:52:41
А на сам сервер нет доступа?

Lulz
24.03.2017
10:27:11
решил не дожидаться переустановил :D

.
24.03.2017
14:02:43
Гайс, чет не получается postgresql подрубить. Вроде все по гайду делаю https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-django-application-on-ubuntu-14-04 Но при попытке запустить нужные мне процессы из Django получаю FATAL: password authentication failed for user Приложу pg_hba # Database administrative login by Unix domain socket local all postgres md5 # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5

lemi
24.03.2017
14:24:22
apache на том же хосте что и postgres ?

можно попробовать в settings.py 'HOST': 'localhost', поменять на 127.1 ну и проверить не помещает логин пароль правильно проставлены

.
24.03.2017
14:27:34
Только что разобрался, вообщем указывал юзера с заглавной буквы везде, щас вывел лист юзеров, понял, что с загловной ничего нет

Артур
25.03.2017
06:40:26
Всем привет. Вопрос. Насколько правильно допускать ошибки дубликатов. как правильнее на бэкенде: проверять через select наличие дубликата в базе или просто смотреть на ошибку 23505 ?

Артур
25.03.2017
06:55:25
Не не ... не. Я о другом. Допустим я хочу добавить пользователя с уникальным номером и создаю уникальный индекс в БД При попытке добавить нового пользователя с тем же телефоном на бэкенде проверяю предварительно ища запись, а потом вывожу ошибку о том что пользоваель с таким телефоном есть. Я думаю отказатья от дополнительного SELECT и хочу ориентироваться на ошибку 23505 Апдейт при этом мне не нужен. Но насколько это правильно, осознанно нарываться на ошибку?

Алексей
25.03.2017
06:56:51
Сделайте бенчмарк и увидите, насколько это правильно в вашем конкретном случае

Max
25.03.2017
07:24:29
По мне так если пользователи не добавляются по 10000 в секунду то можно и проверить селектами

А если много ограничений уникальности, то если просто ловить ошибку то уже надо парсить ее описание чтобы выдать пользователю что не так

Айтуар
25.03.2017
07:25:54
По мне так если пользователи не добавляются по 10000 в секунду то можно и проверить селектами
Ну да, к тому же поиск по уникальному индексу быстрый достаточно.

Max
25.03.2017
07:26:21
Мы вот проверяем селектом

Айтуар
25.03.2017
07:26:51
Мы вот проверяем селектом
А таблица же не гигабайты весит?

Max
25.03.2017
07:27:05
Да и symfony формы, например, автоматом это делают, если на поле навесить соотв. ограничение

не не гигабаты )))

Айтуар
25.03.2017
07:28:08
Единственно могут быть проблемы с блокировками если в этой же таблице хранятся данные о входе, типа время последнего посещения.

Max
25.03.2017
07:34:16
хм, ды не должно быть блокировок в этом случае

выж не будете одновременно апдейтить

Google
Max
25.03.2017
07:34:46
одну и туже строку

пусть там кто-то логинится, у него меняется поле "время последнего логина", но это не должно мешать читающим и даже инсертам, поправьте меня, если я не прав

))))) ну если вы конечно не делаете select for update ))) или какой там еще блокирующий селект есть

Аггей
25.03.2017
08:33:44
Мы вот проверяем селектом
А как же конкуренция?

Max
25.03.2017
08:34:19
поясните

Аггей
25.03.2017
08:36:15
Ну при высокой конкуренции проверка селектом без блокировки безсмысленна. А с блокировка достаточно дорога

И при высокой конкуренции ещё и опасна

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