
Darafei
11.07.2017
06:16:55
ускорить расчёт дистанции индексом не получится, сравнение двух чисел тоже

Николай
11.07.2017
06:17:13
Вроде работает, только с одним ньюансом, мне еще ранее подобное решение подсказывали, нужно переделать location из geometry в geography

Darafei
11.07.2017
06:17:41
оно никогда не зайдёт в индекс по геометрии, а так да, работает ;)
ST_DWithin

Google

Darafei
11.07.2017
06:20:52
соответственно, эстиматор для ST_DistanceSphere(a, b) < N тоже сходит с ума
и число строк тоже неправильно эстимируется

Николай
11.07.2017
06:21:42
У меня в общем в поле location хранятся координаты из google maps, если я его переделаю в geography, я могу на какой-нибудь баг напороться потом? Из запросов в основм, взять координаты и отобразить на карте. Взять точки в радиусе, Выбрать точки в полигоне. Вроде всё

Darafei
11.07.2017
06:22:46
зачем тебе geography?
geometry(Point, 4326)

Николай
11.07.2017
06:24:20
Без него не работает
с ST_DWithin
Не юзается индекс
А так, в целом спасибо

Darafei
11.07.2017
06:28:32
у тебя ж индекс построен по тому, что ты передаёшь агрументом в ST_DWithin, а не по исходному полю, правда? :)

Николай
11.07.2017
06:29:38
М, не понял, это одно и тоже же
Индекс
CREATE INDEX storagepricingapp_storagelocation_location_id
ON public.storagepricingapp_storagelocation
USING gist
(location);

Google

Николай
11.07.2017
06:30:02
location я и передаю в ST_Dwithin
Я создал поле loc geography(Point,4326) и по нему делаю запросы с ST_DWithin

Darafei
11.07.2017
06:30:56
а вызов ST_DWithin как выглядит?

Николай
11.07.2017
06:31:01
И оно быстро работает и индекса вообще нет

Darafei
11.07.2017
06:31:45
что значит "индекса нет", покажи :)

Николай
11.07.2017
06:31:54
http://dumpz.org/2622815/
Индекс есть по facility_id

Darafei
11.07.2017
06:32:18
ST_DWithin("storagepricingapp_storagelocation"."loc", ST_GeomFromEWKB('\x0101000020e6100000b04cf0ff963f5ac0ad4886eb90dc4340'::bytea), 8046.72, true))
ты передаёшь в сигнатуру для geography - geometry
он сам неявно кастует

Николай
11.07.2017
06:33:14
Нет, loc - это уже geography
c location - geometry, работает медленее
Вот я и думаю, то ли мне location переделывать в geography, то ли как-то сделать запрос, чтобы всё-таки facility_id индекс юзался
Второе предпочтительнее

Gleb
11.07.2017
07:40:37
Привет, верно ведь что колонка с типом ENUM в таблице, не может быть NULLABLE(postgres)?

Igor
11.07.2017
07:44:18
проверить самому несложно же

Gleb
11.07.2017
07:45:44
Я проверял, 42804)
Но может есть какой то способо NULL выставить? может как то enum type создавать с поддержкой NULL

Igor
11.07.2017
07:47:38
аээы.. 9.6:
igor=# CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');
igor=# CREATE TABLE test (id serial, color rainbow);
igor=# INSERT INTO test (id) VALUES (1);
igor=# INSERT INTO test (id, color) VALUES (2, NULL);
igor=# SELECT count(*) FROM test WHERE color IS NULL;
count
-------
2

Gleb
11.07.2017
07:48:34
@iamigor Спасибоо!)

Google

Gleb
11.07.2017
07:49:24
А нет (
You will need to rewrite or cast the expression.

Igor
11.07.2017
07:50:07
я вряд ли помогу, но какая версия сервера и какой запрос?

Gleb
11.07.2017
07:51:14
Версию сейчас гляну, я ваш повторил)
Amazing, 9.6.2

Artem
11.07.2017
08:02:38
Напомните плиз по реплиакации master-slave. Slave сервер по ресурасам должен быть похож на мастер или может быть значительно слабее? реплика используется на случай падения мастера.

Andrey
11.07.2017
08:11:05
Если на случай падения мастера, то конечно такой же по ресурсам должен быть, иначе он просто не выдержит нарузки при переключении.

Артур
11.07.2017
09:39:47
Ребят, силюсь понять синтаксис, но не понимаю.
В чём отличие
SELECT * FROM a,b WHERE a.id=b.a_id
от
SELECT * FROM a JOIN b ON a.id=b.a_id

Darafei
11.07.2017
09:41:24
В этом случае они эквивалентны

Артур
11.07.2017
09:42:17
А в каком нет?

Darafei
11.07.2017
09:42:37
В lateral, например
Или когда джоинов больше, порядок перебора вариантов у планировщика начинается с "делать как написано"

Артур
11.07.2017
09:45:00
И тогда последний вопрос. (надеюсь не развяжу холивар)
А как правильнее?

Николай
11.07.2017
09:46:02
с джоинами

Darafei
11.07.2017
09:46:14
Правильнее - чтобы было не больно читать

Николай
11.07.2017
09:46:32

Darafei
11.07.2017
09:46:34
А оно контекстуально

Andrey
11.07.2017
09:47:05

Артур
11.07.2017
09:47:25
спасибо.

Darafei
11.07.2017
09:47:58
Зависит. Если нужно семь разных таблиц поджойнить фиг пойми по чему, то это фиг пойми что иногда лучше в where вынести

Alexander
11.07.2017
09:48:41
а можно еще ON что-то AND что-то ведь)

Google

Darafei
11.07.2017
09:48:51
В географии такое сплошь и рядом :)
"а вот это к этому по лайку, нет, по дистанции к этому, нет, по равенству айди к этому"

Alexander
11.07.2017
09:53:13

Darafei
11.07.2017
09:55:39
А еще в where лучше писать условия в том порядке, в котором их стоит проверять :)

Admin
ERROR: S client not available

Aleksey
11.07.2017
10:22:09
Добрый день!
Столкнулись с такой пробемой:
Недавно переехали на PostgreSQL на Linux
версия - PostgreSQL 9.2.18 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 20150 623 (Red Hat 4.8.5-11), 64-bit
И при выполнении бекапа pg_dump съедает всю память и отваливается с ошибкой out of memory
Происходит на шаге:
pg_dump: saving database definition
Killed
Особенности БД - очень много blob.
Характеристики сервера - 16Gb памяти. Размер БД ~280Gb
На старой машине под Windows бекап все-таки выполнялся, но за полтора дня. Посоветуйте с какими вообще настройками можно поиграться чтобы pg_dump отработал?
настройки postgresql.conf я так понимаю для этого не сильно подходят, а параметров запуска pg_dump в общем-то не очень и много ...

Mike Chuguniy
11.07.2017
10:24:14
Вангую я, что винда использовала своп, однако. Что вывод free говорит?

Aleksey
11.07.2017
10:30:52
активно начинает есть во время бекапа
нагуглили предложение ограничить пользователя сверх у- в данном случае бекап просто не проходит

Mike Chuguniy
11.07.2017
10:31:53
free - без ключей?

Aleksey
11.07.2017
10:33:14
в момент кила pg_dump сьедает вообще всю свободную память

Mike Chuguniy
11.07.2017
10:36:58
1,6 гига своп. Думаю я, что это мало. А какой самый большой размер блоба?
Ну а навскидку рисуется следующий костыль: дампится схема (ключик -s) БД с последующим разделением на создание таблиц и создание индексов, а поотом уже данные потаблично, циклом по списку таблиц, с ключиком -a (только данные).
Но это совсем лютый костыль.
С другой стороны добавлять своп. Сколько его надо - непонятно, а автоматически добавлять, я не слыхал про такое в *нихах вообще.

Darafei
11.07.2017
10:47:41
http://www.hecticgeek.com/2012/01/automatic-virtual-swap-space-creator-ubuntu-linux/

Aleksey
11.07.2017
10:51:28

Игорь
11.07.2017
10:53:51

Mike Chuguniy
11.07.2017
10:54:40
@Komzpa век жЫви, век учись! Дураком помрёшь. :)

Google

Darafei
11.07.2017
10:55:13
очень простая штука, если думаешь, что чего-то не существуешь, это надо набрать в гугле

Aleksey
11.07.2017
10:55:19

Mike Chuguniy
11.07.2017
10:55:39
фулл бекап - это pg_basebackup

Игорь
11.07.2017
10:55:56

Айтуар
11.07.2017
10:57:28

Aleksey
11.07.2017
10:59:12

Игорь
11.07.2017
10:59:29

Aleksey
11.07.2017
11:00:42
мда а из коробки все малофункциональное? (((

Игорь
11.07.2017
11:01:07
К тому же ваш PGDATA размером в >300G восстановится из basebackup (pgbackrest с опцией —delta) за считанные минуты, вместо over 12 часов pg_restore

Артур
11.07.2017
11:06:21
Хочу техническую сторону понять
Он снапшот базы делает?

Игорь
11.07.2017
11:09:59
Он получает только измененные данные

Артур
11.07.2017
11:10:57

Игорь
11.07.2017
11:15:16
Да, конечно, но скорость будет схожа с простым копированием 300G