@pgsql

Страница 396 из 1062
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
В lateral, например
Ещё, например, с LEFT.

Артур
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
В географии такое сплошь и рядом :)

"а вот это к этому по лайку, нет, по дистанции к этому, нет, по равенству айди к этому"

а можно еще ON что-то AND что-то ведь)
Ага. А граничные условия тогда в where или в on выносить? ;)

Alexander
11.07.2017
09:53:13
Ага. А граничные условия тогда в where или в on выносить? ;)
это хороший способ не джойнить лишние объемы данных) и все зависит от самого запроса

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
Вангую я, что винда использовала своп, однако. Что вывод free говорит?
total used free shared buff/cache available Mem: 16264536 363864 184716 2172748 15715956 13354736 Swap: 1678332 58624 1619708

активно начинает есть во время бекапа

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

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/

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
хм а какие best practics тогда? все-таки с фулл бекапом спится спокойнее )
full backup - это basebackup. pg_dump это не та база, которая у вас в PGDATA

Айтуар
11.07.2017
10:57:28
Aleksey
11.07.2017
10:59:12
full backup - это basebackup. pg_dump это не та база, которая у вас в PGDATA
pg_basebackup - это бекап всего кластера, а не одной базы правильно?

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

Игорь
11.07.2017
11:01:07
pg_basebackup - это бекап всего кластера, а не одной базы правильно?
Да, но например, решение pgbackrest, позволяет из basebackup вытащить только одну базу, что очень полезно для восстановления только одной базы и как следствие для разворачивания из prod (в котором много бд) в dev для разработчиков (им нужна только одна ведь бд)

К тому же ваш 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

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